gpt4 book ai didi

MySQL - 使用 COUNT 在同一个表上进行完全外连接

转载 作者:行者123 更新时间:2023-11-29 12:56:55 25 4
gpt4 key购买 nike

我正在尝试生成以下格式的表格。

Proday | 2014-04-01 | 2014-03-01
--------------------------------
1 | 12 | 17
2 | 6 | 0
7 | 0 | 24
13 | 3 | 7

Prodays(两个时间戳之间的持续时间)是一个计算值,月份的数据是一个 COUNT。我可以输出一个月的数据,但无法将查询连接到其他月份。每个月的索引 (proday) 可能不匹配。例如,2014-04-01 可能没有 Prodays 7 的任何数据,而 2014-03-01 可能没有 Prodays 2。应以 0 或 null 表示。

我怀疑 FULL OUTER JOIN 应该可以解决问题。但你读过这在 Mysql 中是不可能的吗?

这是获取单月数据的查询:

SELECT round((protime - createtime) / 86400) AS prodays, COUNT(id) AS '2014-04-01'
FROM `tbl_users` as t1
WHERE status = 1 AND DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-04-01'
AND DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-04-01')
GROUP BY prodays
ORDER BY `prodays` ASC

如何连接/联合附加查询来创建 2014-03-01 的列?

最佳答案

您想要使用条件聚合 - 即,将过滤逻辑从 where 子句移动到 select 子句:

SELECT round((protime - createtime) / 86400) AS prodays,
sum(DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-04-01' AND
DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-04-01')
) as `2014-04-01`,
sum(DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') >= '2014-03-01' AND
DATE_FORMAT(FROM_UNIXTIME(createtime),'%Y-%m-%d') <= LAST_DAY('2014-03-01')
) as `2014-03-01`
FROM `tbl_users` as t1
WHERE status = 1
GROUP BY prodays
ORDER BY `prodays` ASC;

关于MySQL - 使用 COUNT 在同一个表上进行完全外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23922617/

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