如何修复SQL中组功能的无效使用

时间:2019-05-02 00:24:56

标签: sql where

我试图使用where编写代码来查找所选列中的特定行,但是当我添加where时却不起作用,而在放置Where之前子句效果很好。

因此有表stepstep_taken
step具有idtitle列;
step_taken具有iduser_idstep_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子句时,它会产生错误。

1 个答案:

答案 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