2012-06-28 52 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; 

PHRASETIMESTAMP是在表列。 該代碼選擇前16個用戶在過去7天插入的PHRASES。 還有一列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; 

論計算器我喜歡的信息的其他問題,我不得不使用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

我不知道,正確的語法可能如何。 希望在這裏得到任何幫助。 謝謝!

+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

別名colums不支持,是的;根據文檔WHERE – Sammaye

回答

2

Having條款後面加上ORDER BY A DESC

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