Как исправить неправильное использование групповой функции в SQL - PullRequest
0 голосов
/ 02 мая 2019

Я пытался написать код, который ищет определенные строки в выбранном столбце, используя 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, это привело к ошибке.

1 Ответ

1 голос
/ 02 мая 2019

Вы можете использовать функции агрегирования только в предложении 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;

Обратите внимание, что в некоторых СУБД, таких как MySQL, вы можететакже используйте псевдоним столбца в предложении HAVING, т.е.

HAVING title_count > 2
...