【发布时间】:2020-01-22 12:57:34
【问题描述】:
我正在尝试从我的 SQL 数据库中获取一些数据,但我遇到了一些我不明白的问题。 这是我的查询:
SELECT SUM(t0_.in_budget_hours) AS sclr_0,
SUM(t0_.billable_amount) AS sclr_1,
SUM(t0_.out_budget_hours) AS sclr_2,
SUM(t0_.unprod_hours) AS sclr_3,
SUM(t0_.off_hours) AS sclr_4,
SUM(t0_.duration) AS sclr_5,
SUM(t0_.in_budget_hours) / SUM(t0_.duration) * 100 AS sclr_6,
CONCAT(c1_.name, ' ', c1_.lastname) AS sclr_7,
c1_.alias AS alias_8,
c1_.email AS email_9
FROM collaborator c1_
RIGHT JOIN timesheet t0_ ON (c1_.email = t0_.email)
WHERE t0_.entry_date BETWEEN '2020-01-01 00:00:00' AND '2020-01-22 23:59:59'
GROUP BY sclr_7, c1_.alias, c1_.email
ORDER BY sclr_7 ASC
我有很多从时间表表中计算出来的信息,我想将这些计算结果与合作者姓名合并。
我希望拥有所有协作者并通过时间表加入他们,即使他们没有任何时间表(LEFT JOIN)。如果没有与协作者相关的行,则总和结果应为 0,但协作者应出现在结果数据集中。但目前如果协作者没有任何时间表BETWEEN '2020-01-01 00:00:00' AND '2020-01-22 23:59:59',他将不会出现在结果中。
我使用此线程What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN? 尝试了几种类型的连接,但对我没有任何效果。 有人可以告诉我即使没有时间表如何让所有合作者参与进来吗?
【问题讨论】:
-
WHERE (a0_.entry_date BETWEEN '2020-01-01 00:00:00' AND '2020-01-22 23:59:59') OR (a0_.entry_date IS NULL)可以工作 -
您的
a0_表是什么?它似乎没有在你的 sn-p 中声明 -
WHERE (a0_.entry_date BETWEEN '2020-01-01 00:00:00' AND '2020-01-22 23:59:59') OR (a0_.entry_date IS NULL)不起作用,但对这个提议很有效。a0_是t0_,抱歉我已经修复了这个错误。 -
您通常
GROUP BY与您SELECT相同的列,除了那些是设置函数的参数的列。 -
我对 group by 没有任何问题,所以这与我的加入问题有关吗?