gpt4 book ai didi

mysql - 计算多个月的不同值

转载 作者:行者123 更新时间:2023-11-29 00:42:48 28 4
gpt4 key购买 nike

这里有个小问题。我这辈子都想不出怎么做。

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 订购时,订单会逐月变化,这不会请允许我将它们粘贴到电子表格中。我可以按邮政编码订购,但同样不存在“零”数据邮政编码,因此列表每个月都在变化。

如有任何想法或建议,我们将不胜感激!

最佳答案

您可以使用子查询使其工作:

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 数,包括零。

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

首先,我定义了一个子查询,使 all 成为邮政编码和月份的可能组合(a 子查询),然后我将其与第二个子查询连接起来返回邮政编码和月份的值(c 子查询)。使用 left join 可以计算 a 子查询中可能的空组合。

希望对你有帮助。

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com