首页 > 解决方案 > 按相似字段分组的嵌套选择查询

问题描述

我有一个时间条目数据库,其中存储每个条目的 userID、roundedHours、dateSpent 和 taskID(这些是每日时间卡)。我正在尝试创建一个查询,该查询将输出按 userID 分组的 roundedHours 总和,其中 taskID 在指定日期之间满足特定值。

我尝试过的代码如下。overhead_admin我需要将其输出并按用户 ID 分组,但我的输出是两者的总和total_hours(每行相同),而不是特定于用户 ID。

SELECT userName, userID, 
    (SELECT sum(roundedHours)
        FROM `db`.`TimeEntries`
        WHERE  taskId = 3050483 AND (spendDate BETWEEN '2020-11-02' AND '2020-11-08')) as overhead_admin,
    (SELECT sum(roundedHours)
        FROM `db`.`TimeEntries`
        WHERE (spendDate BETWEEN '2020-11-02' AND '2020-11-08')) as total_hours
FROM `db`.`TimeEntries`
GROUP BY userID

任何人都可以帮助我,以便每一行都将具有该用户的总 SPECIFIC 而不是整体相加吗?我得到的输出错误如下图所示:

在此处输入图像描述

标签: mysqlsql

解决方案


使用条件聚合:

SELECT userName, userID, 
       sum(case when taskId = 3050483 AND (spendDate BETWEEN '2020-11-02' AND '2020-11-08' then roundedHours end) as overhead_admin,
       sum(case when spendDate BETWEEN '2020-11-02' AND '2020-11-08' then roundedHours end) as total_hours
FROM `db`.`TimeEntries`
GROUP BY userID

推荐阅读