【发布时间】:2020-02-08 07:38:25
【问题描述】:
我在 SQLite 中有一个 SELECT 语句,我需要在其中找到过去一年中每人注册的车辆数量。这是查询:
SELECT
p.fname,
p.lname,
p.bdate,
p.bplace,
COUNT(
DISTINCT CASE r.vin WHEN r.regdate >= date('now', '-1 years') THEN 1 ELSE null END
),
COUNT(DISTINCT(t.violation))
FROM
persons p
LEFT JOIN registrations r ON p.fname = r.fname
AND p.lname = r.lname
LEFT JOIN tickets t ON r.regno = t.regno
GROUP BY
p.fname,
p.lname,
p.bdate,
p.bplace;
问题在于 CASE 语句,它没有检测到条件何时为真,并将我的所有值默认为 0。我该如何解决这个问题,或者有其他方法可以在 COUNT 语句中指定条件
【问题讨论】:
-
尝试将
ELSE null更改为ELSE 0。 -
@daShier 不,这不起作用,因为 count 语句将 0 计为一个值并将不需要的行也加起来,它需要为 null,因此 COUNT 不计算它
-
它将
r.vin与r.regdate >= date('now', '-1 years')的结果进行比较,这似乎不太可能是您想要或工作的结果。