我试图使用where
编写代码来查找所选列中的特定行,但是当我添加where
时却不起作用,而在放置Where
之前子句效果很好。
因此有表step
,step_taken
:
step
具有id
,title
列;
step_taken
具有id
,user_id
,step_id
我想获得用户已执行2次以上的步骤的标题。
所以我首先写了
SELECT title, COUNT(*)
FROM step
JOIN step_taken ON step.id = step_taken.step_id
GROUP BY title
ORDER BY COUNT(*);
然后从1到10的那一个显示结果很好。
但是当我添加
WHERE COUNT(*) > 2
喜欢
SELECT title, count(*)
FROM step
JOIN step_taken ON step.id = step_taken.step_id
WHERE COUNT(*) > 2
GROUP BY title
ORDER BY COUNT(*);
我得到一个错误。
如何解决错误并获得仅大于计数值2的结果?
我想选择计数大于2的行,但是当我使用WHERE
子句时,它会产生错误。
答案 0 :(得分:1)
您只能在HAVING
子句中使用聚合函数。将查询更改为此:
SELECT title, count(*)
FROM step join step_taken
ON step.id=step_taken.step_id
GROUP BY title
HAVING count(*)>2
ORDER BY count(*);
请注意,通过使用列别名,可以使查询更具可读性:
SELECT title, COUNT(*) AS title_count
FROM step
JOIN step_taken ON step.id = step_taken.step_id
GROUP BY title
HAVING COUNT(*) > 2
ORDER BY title_count;
请注意,在某些DBMS(例如MySQL)中,您也可以在HAVING
子句中使用列别名,即
HAVING title_count > 2