gpt4 book ai didi

mysql - 如何在并非所有日期都有结果的 MySQL 查询中将一周中的每一天打印为列 1

转载 作者:行者123 更新时间:2023-11-29 05:33:27 25 4
gpt4 key购买 nike

我有以下查询显示一周中每一天的计费小时数

SELECT DAYNAME(record_date),
sum(value)
FROM acx_time_records
WHERE
acx_time_records.state = 3
AND record_date >= '2012-10-1' AND record_date <= '2012-10-7'
AND user_id = 7
GROUP BY
dayname(acx_time_records.record_date)
ORDER BY weekday(acx_time_records.record_date)

上面的查询输出如下结果:

Tuesday    9.75
Friday 1

我遇到的问题是我需要将这些值绘制到一个图表中,该图表的 X 轴已经定义为一周中的每一天:

 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

因此,我需要通过一周中的每一天来获取结果,而不仅仅是结果中显示的特定日期/小时。我考虑过连接到一个新表,该表具有一周中的每个日历日和一个日期索引,但我不确定这怎么可能。理想的输出是:

Monday    0
Tuesday 9.75
Wednesday 0
Thursday 0
Friday 1
Saturday 0
Sunday 0

任何有关如何实现此目的的提示/建议都将不胜感激。我知道这也可以通过将 MySQL 与 PHP 结合使用来促进,但我正在尝试以尽可能只需要 MySQL 的方式来实现这一点。

最佳答案

LEFT JOIN 的解决方案。

您可以按照新家具的建议使用附加表或使用一些带有 UNION 的 SELECT。我还在连接表中找到了 WHERE 过滤器。

CREATE TABLE week_days(
week_day_num INT(11) DEFAULT NULL
);

INSERT INTO week_days(week_day_num) VALUES (1),(2),(3),(4),(5),(6),(7);

SELECT
DAYNAME(atrrecord_date),
SUM(atr.value),
COALESCE(SUM(atr.value) , 0)
FROM week_days wd
LEFT JOIN (
SELECT * FROM acx_time_records
WHERE
acx_time_records.state = 3
AND record_date >= '2012-10-1' AND record_date <= '2012-10-7'
AND user_id = 7
) atr
ON wd.week_day_num = DAYOFWEEK(atr.record_date)
GROUP BY
DAYOFWEEK(atr.record_date);

关于mysql - 如何在并非所有日期都有结果的 MySQL 查询中将一周中的每一天打印为列 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792401/

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