Можно ли оценить псевдонимы столбцов в предложении WHERE? - PullRequest
0 голосов
/ 22 октября 2009

Прежде всего, я не эксперт по запросам MySQL, и я не могу найти решение своей проблемы.

Пример:

SELECT SUM(IF(table1.col1<4,1,0)) AS score WHERE score>0 GROUP BY table1.col2

Вышеприведенное приведёт к ошибке, так как оценка по столбцу отсутствует в таблице 1.

Это мой обходной путь:

SELECT SUM(IF(table1.col1<4,1,0)) AS score GROUP BY table1.col2

Затем проверка каждой строки в PHP

if($row['score']>0){...

Существует проблема с производительностью, поскольку я зацикливаюсь на строках, которые, как я знаю, мне не понадобятся, в идеале мне нужно игнорировать эти строки в запросе.

Насколько я понимаю, предложение WHERE запускается для каждой строки таблицы, а не для сгруппированной строки.

Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 22 октября 2009

Having псевдонимы столбцов, так что вы можете сделать это:

SELECT SUM(IF(table1.col1<4,1,0)) AS score
GROUP BY table1.col2
HAVING score > 0

и вы можете упростить его, пытаясь посчитать строки, в которых col1 <4: </p>

SELECT COUNT(table1.col1) AS score
 WHERE table1.col1 < 4
GROUP BY table1.col2
HAVING score > 0
1 голос
/ 22 октября 2009

Предложение WHERE оценивается до группировки строк в соответствии с предложением GROUP BY; следовательно, это не только проблема в вашем синтаксисе: столбец score просто бессмыслен в этом контексте. Он может быть вычислен только после оценки групп, следовательно, ваше решение определенно имеет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...