使用不同的位置列进行子选择

问题描述 投票:0回答:1

大家好,美好的一天。 直接回答我的问题。

我的场景是这样的。我有一张桌子

  1. 如果第 2 列有数据,我需要获取第 1 列的 sum(只是一个示例)
  2. 如果第 2 列为空,我需要获取第 1 列的平均值(再次只是一个例子)
  3. 我需要它按名称分组并让计算反映每个用户

所以我对第 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数据表格 下半部分的表格是我一直在尝试做的结果

mysql subquery
1个回答
0
投票

我会在这里使用条件聚合。假设

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
的值计算总和或平均值。

© www.soinside.com 2019 - 2024. All rights reserved.