有点小问题。我一辈子都不知道怎么做。

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

2月:
zip | totalzip
---------------------
46530 | 1
46521 | 4
49112 | 3

这对第一个月来说很好,但我需要这一整年。我可以运行这个查询12次,但是出现了2个问题。我全年有300多个邮政编码。在某些月份,邮政编码不存在,因此计数为0(但MySQL输出不输出“零数据”。另外,当我按totalzip下订单时,订单会按月更改,这不允许我将它们粘贴到电子表格中。我可以按邮政编码订购,但“零”数据子码仍然不存在,因此列表每月都会更改。
如有任何想法或建议,将不胜感激!

最佳答案

您可以使用子查询:

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

这会给你每个月的拉链数量,包括零。
让我解释一下这是如何工作的:
首先,我定义了一个子查询,使zips和months的所有可能组合成为子查询(子查询a),然后我将其与第二个子查询(返回zips和months的值)(子查询c)。使用left join允许计算a子查询中可能的空组合。
希望这对你有帮助。
注意:last_day()函数返回给定日期当月的最后一天;例如:last_day('2012-07-17')='2012-07-31'

关于mysql - 计算多个月的不同值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11527695/

10-16 00:43