1

这里有点问题。我不能为我的生活,弄清楚如何做到这一点。

pid | firstlast | lastvisit | zip 
---------------------------------------
435 | 2001-01-17 | 2012-01-21 | 46530
567 | 2001-01-18 | 2012-01-21 | 46530
532 | 2001-01-19 | 2012-01-22 | 46535
536 | 2001-01-19 | 2012-01-23 | 46535
539 | 2001-01-20 | 2012-01-27 | 46521

这是我的 SQL 查询:

SELECT DISTINCT zip, COUNT(zip) AS totalzip FROM production WHERE MONTH(lastvisit) = "1" GROUP BY zip ORDER BY totalzip DESC;

输出:

简:

zip | totalzip
--------------------- 
46530 | 2
46535 | 2
46521 | 1

二月:

zip | totalzip
--------------------- 
46530 | 1
46521 | 4
49112 | 3

这对第一个月来说很棒,但我全年都需要这个。我可以运行这个查询 12 次,但是会出现 2 个问题。我全年有 300 多个邮政编码。在某些月份,邮政编码不存在,因此计数为 0(但 MySQL 输出不输出“零数据”。此外,当我通过 totalzip 订购时,订单每月都会发生变化,这不会请允许我将它们粘贴到电子表格中。我可以按邮政编码订购,但再次“零”数据邮政编码不存在,因此列表每个月都会更改。

任何想法或建议将不胜感激!

4

3 回答 3

1

您可以使用子查询来完成这项工作:

select 
    a.*, count(c.zip) as totalZip
from
   (select 
       monthVisit, zip
    from
        (select distinct last_day(lastVisit) as monthVisit from production) as m,
        (select distinct zip from production) as z
   ) as a
   left join (select 
                  last_day(lastVisit) as monthVisit, zip
              from production) as c
       on a.monthVisit=c.monthVisit and a.zip=c.zip
 group by
     a.monthVisit, a.zip

这应该为您提供每个月的拉链计数,包括零。

让我解释一下这是如何工作的:

首先,我定义了一个子查询,它生成了所有可能的 zip 和月份组合(a子查询),然后我加入了第二个返回 ZIP 和月份值的子查询(c子查询)。使用left join允许计算a子查询中可能的空组合。

希望这对您有所帮助。

注意:该last_day()函数返回给定日期当月的最后一天;例如:last_day('2012-07-17')='2012-07-31'

于 2012-07-17T18:07:24.973 回答
0

如果你有一个邮政编码表(你应该),你可以将它与你的数据表连接起来(左连接),这甚至会带来零计数的邮政编码。

于 2012-07-17T17:30:36.223 回答
0

您的问题的第一部分通过额外的分组来解决。尝试这样的事情:

 SELECT DISTINCT zip, YEAR(lastvisit),  MONTH(lastvisit), COUNT(zip) AS totalzip 
 FROM production 
 GROUP BY  zip, YEAR(lastvisit),  MONTH(lastvisit)
 ORDER BY totalzip DESC; 

要在没有数据时添加“零”摘要,我通常会使用完整列表进行左连接。(上面的@Alfabravo 也说明了这一点)。所以最终的查询看起来有点像:

 SELECT DISTINCT zip, YEAR(lastvisit),  MONTH(lastvisit), COUNT(zip) AS totalzip 
 FROM production left join 
      (SELECT DISTINCT zip from production) as zipMap on zipmap.zip = production.zip
 GROUP BY  zip, YEAR(lastvisit),  MONTH(lastvisit)
 ORDER BY totalzip DESC; 
于 2012-07-17T17:54:09.957 回答