0

我有一个问题,如何在 where/have 子句中使用“别名”列。我知道有一些与相关主题有关的问题。但是我在网上和 stackoverfolw 上搜索并没有找到解决方案。

所以我希望通过这种方式得到帮助..

以下语句效果很好:

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 个短语,这些短语是用户在过去 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;

但这会返回一个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的“HAVING B>1 LIMIT 16”附近使用正确的语法

我不知道正确的语法如何。希望在这里得到任何帮助。谢谢!

4

1 回答 1

2

放置ORDER BY A DESC afterHaving子句。

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; 
于 2012-06-28T13:03:02.833 回答