gpt4 book ai didi

mysql - 使用 Union All 获取总计

转载 作者:行者123 更新时间:2023-11-29 08:15:41 25 4
gpt4 key购买 nike

这就是我的情况。我有 1 个查询获取按日期分组的结果,然后我联合所有第二个查询获取总计(不按日期分组)。我的问题是我正在计算字段的平均值,当我想合计平均值时,我的数字没有相加。

这是我的 SQLFiddle

这是我的查询:

SELECT
t.end,
SUM(CASE WHEN (t.start != t.end) THEN TIMESTAMPDIFF(DAY, t.start, t.end) ELSE 1 END) / COUNT(t.id) as averageTime
FROM store t
GROUP BY t.end
UNION ALL
SELECT
'Total',
SUM(CASE WHEN (t.start != t.end) THEN TIMESTAMPDIFF(DAY, t.start, t.end) ELSE 1 END) as averageTime
FROM store t

现在第二个查询只给出总数而不是平均值的总数。感谢任何帮助,谢谢。

由于存在一些困惑,所以需要澄清...

我需要根据该组中有多少个项目来获取每个分组日期的平均值

时间差/计数(t.id)

由于我没有将所有查询分组到联合中,因此它会将其作为一个整体进行处理,然后进行划分。我希望这更有意义。

第一个查询正确,数据输出如下:

1, 1.6667, 3(这些是第一个查询的平均时间值)5.6667(应该是总行)现在我已经输出 10,这是第一行平均之前的总和。

最佳答案

查询的第一部分可能可以写成:

SELECT t.end,
AVG(CASE WHEN t.start != t.end THEN TIMESTAMPDIFF(DAY, t.start, t.end) ELSE 1
END) as averageTime
FROM store t
GROUP BY t.end;

据推测,您想要的是平均值的平均值,而不是总体平均值。我这么认为是因为您的查询正在计算总体平均值。

一种方法是暴力方式:

SELECT t.end,
AVG(CASE WHEN t.start != t.end THEN TIMESTAMPDIFF(DAY, t.start, t.end) ELSE 1
END) as averageTime
FROM store t
GROUP BY t.end
UNION ALL
SELECT 'Total', avg(AverageTime)
FROM (SELECT t.end,
SUM(CASE WHEN t.start != t.end THEN TIMESTAMPDIFF(DAY, t.start, t.end) ELSE 1
END) as averageTime
FROM store t
GROUP BY t.end
) t;

关于mysql - 使用 Union All 获取总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646348/

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