2012-06-28 3 views
0

У меня вопрос, как использовать столбец «псевдоним» в предложении where/having. Я знаю, что есть некоторые вопросы по теме. Но я ищу через сеть и на stackoverfolw и не нашел решения.mysql используя расчетный столбец где/с

Так я надеюсь на помощь в этом случае ..

Следующее утверждение хорошо работает:

SELECT PHRASE,COUNT(*) AS A 
    FROM my_statistics 
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY 
    GROUP BY PHRASE ORDER BY A DESC 
    LIMIT 16; 

PHRASE и TIMESTAMP столбцы в таблице. Код выбирает первые 16 PHRASES, которые вставляются пользователями за последние 7 дней. Существует также столбец USER, поэтому мне сейчас нравится выбирать первые 16 фраз, которые вставляются более чем одним пользователем. Так я попытался это:

SELECT PHRASE,COUNT(*) AS A, COUNT(DISTINCT(USER)) AS B 
    FROM my_statistics 
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY 
      AND B>1 
    GROUP BY PHRASE ORDER BY A DESC 
    LIMIT 16; 

На другие вопросы по StackOverflow Увлекаюсь к информации, что я должен использовать HAVING

SELECT PHRASE,COUNT(*) AS A, COUNT(DISTINCT(USER)) AS B 
    FROM my_statistics 
    WHERE TIMESTAMP>NOW()-INTERVAL 7 DAY  
    GROUP BY PHRASE ORDER BY A DESC 
    HAVING B>1 
    LIMIT 16; 

Но это возвращает ошибку:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING B>1 LIMIT 16' at line 5

I не знаю, как может быть правильный синтаксис. Надеюсь на любую помощь здесь. Спасибо!

+0

Дубликат: http://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error – Sammaye

+0

@Sammaye чтение HTTP://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error ... это люди, это невозможно? –

+0

Псевдонимы не поддерживаются, да; в соответствии с документами для WHERE – Sammaye

ответ

2

Место ORDER BY A DESC после Having статья.

SELECT phrase, 
     Count(*)    AS A, 
     Count(DISTINCT(user)) AS B 
FROM my_statistics 
WHERE timestamp > Now() - INTERVAL 7 day 
GROUP BY phrase 
HAVING b > 1 
ORDER BY a DESC 
LIMIT 16; 
+0

разделение группа по заказу .. это! Я всегда использовал оба вместе! Спасибо! –

+0

Да, я прочитал его сейчас MySQL требует сортировки по Наличие, хороший улов – Sammaye