大家好,美好的一天。 直接回答我的问题。
我的场景是这样的。我有一张桌子
所以我对第 1 列有 2 种不同的计算,并且计算基于第 2 列是否有数据或 NULL
这是我到目前为止所得到的,我能够得到总和,但是当求平均值时,我很难弄清楚。
SELECT T1.user_name, T1.Good_Hours, T2,*
(
SELECT user_name, SEC_TO_TIME( SUM( TIME_TO_SEC( total_tat ) ) ) as Good_Hours
FROM Table 1
WHERE etc_type = "YES"
WHERE date_time BETWEEN "(DATETIME example Only)" AND "(DATETIME example Only)"
AND column2 IS NULL
GROUP BY user_name
) as T1,
(
SELECT COUNT(column2) , SEC_TO_TIME(AVG(TIME_TO_SEC(total_tat))) as NICE_TIME
FROM Table 1
WHERE etc_type = "YES"
WHERE date_time BETWEEN "(DATETIME example Only)" AND "(DATETIME example Only)"
AND column2 IS NOT NULL
GROUP BY user_name
) as T2
到目前为止,我得到了正确的 Good_Hours 但第二个子选择仅返回第一条记录并对整个表重复它。
是否有什么我遗漏或忽略的东西。
如果可以的话我想的是这样的结果
user_name - missed_calls - Good_Hours - NICE_TIME
John Doe 0 00:01:00 08:00:00
Jane Doe 5 00:14:00 29:00:00
Hugo Doe 9 00:47:00 00:10:00
但是我得到的是这样的
user_name - missed_calls - Good_Hours - NICE_TIME
John Doe 0 00:01:00 08:00:00
Jane Doe 5 00:14:00 08:00:00
Hugo Doe 9 00:47:00 08:00:00
我所要求的只是一些建议。谢谢你。
了解更多信息
上方表格为RAW数据表格 下半部分的表格是我一直在尝试做的结果
我会在这里使用条件聚合。假设
WHERE
子句中的范围相同:
SELECT
user_name,
SEC_TO_TIME(SUM(CASE WHEN column2 IS NULL THEN TIME_TO_SEC(total_tat) ELSE 0 END)) AS Good_Hours,
SEC_TO_TIME(AVG(CASE WHEN column2 IS NOT NULL THEN TIME_TO_SEC(total_tat) END)) AS NICE_TIME
FROM Table1
WHERE etc_type = 'YES' AND
date_time BETWEEN ? AND ? AND
column2 IS NULL
GROUP BY user_name;
此方法对表格进行一次遍历,并根据
column2
的值计算总和或平均值。