2015-05-13 2 views
0

Пожалуйста, не кусайте меня за это, но я новичок в mysql, и у меня есть проблема с использованием псевдонима в предложении WHERE. Я думал, что можно использовать псевдоним для агрегатной функции, определенный в инструкции select. Вот мой запросИспользование псевдонима в предложении WHERE в запросе MYSQL

SELECT a.name, s.name, COUNT(e.id) as total FROM athletes a 
INNER JOIN sports s on s.id = a.sport_id 
INNER JOIN events e on s.id = e.sport_id 
WHERE total >=2 GROUP BY a.name 

Но, я ловлю ошибку «Неизвестный общий столбец в ИНЕКЕ». Может ли кто-нибудь сказать мне, правильно ли делать такой запрос?

ответ

3

Вы не можете использовать псевдоним в предложении where. Вы должны использовать это в having

SELECT 
a.name, 
s.name, 
COUNT(e.id) as total FROM athletes a 
INNER JOIN sports s on s.id = a.sport_id 
INNER JOIN events e on s.id = e.sport_id 
GROUP BY a.name having total >=2 
+0

Спасибо большое! Это работает именно так, как я хочу! – volodymyr3131

0

Yo не может использовать псевдоним столбца в предложении где. Вы должны использовать выражение COUNT(e.id) в том, где clasue или вы можете использовать псевдоним в имеющей п:

SELECT a.name, s.name, COUNT(e.id) as total FROM athletes a INNER JOIN sports s on s.id = a.sport_id INNER JOIN events e on s.id = e.sport_id WHERE COUNT(e.id)>=2 GROUP BY a.name 

или

SELECT a.name, s.name, COUNT(e.id) as total FROM athletes a INNER JOIN sports s on s.id = a.sport_id INNER JOIN events e on s.id = e.sport_id having total>=2 GROUP BY a.name 
1

Вместо того, где общее> = 2 можно использовать HAVING (всего> = 2)

HAVING:

SELECT a.name, s.name, COUNT(e.id) as total 
FROM athletes a 
INNER JOIN sports s on s.id = a.sport_id 
INNER JOIN events e on s.id = e.sport_id 
GROUP BY a.name, s.name 
HAVING (total >= 2); 
+2

Это работает только с функцией HAVING. Заявление 'WHERE COUNT (e.id)> = 2' также выдают ошибку« Недопустимое использование групповой функции » – volodymyr3131

+0

@ volodymyr3131 протестировал ее и действительно произошла ошибка. Так что удалил плохой код. Благодаря! – massie

+0

@ volodymyr3131 Это потому, что 'HAVING' работает на промежуточном результирующем наборе после группировки, тогда как' WHERE' работает с данными таблицы. – glglgl

Смежные вопросы