Я пытаюсь сделать SUM
против всех предметов, которые соответствуют определенному условию, например так:
SELECT l.Building_Name,
SUM(CASE WHEN s.Date >= '20180930' THEN 1 ELSE 0 END) Validated,
COUNT(DISTINCT s.id) Total
FROM Lab_Space s
JOIN Locations l ON s.Building_Code = l.Building_Code
GROUP BY l.Building_Name
Правильно COUNT
, и скажу что-то вроде 20, потому что яможно поставить DISTINCT s.id
там.Тем не менее, мой SUM
заканчивается примерно как 1500. Это потому, что когда я делаю, JOIN
строки дублируются несколько раз, и, таким образом, SUM
рассчитывает против каждой.
Как я могусделать SUM / CASE, как это, но удостовериться, что он применяется только к отдельным строкам?
s.id l.building_name s.date
1 JF 2018-11-10
1 JF 2018-11-10
2 JF 2018-12-12
Так что, если у меня есть такие данные, я собираюсь получить мой счет правильно из 2, но validate скажет3 потому что идентификатор 1
появляется дважды из-за выполнения JOIN