我有一个问题,如何在 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”附近使用正确的语法
我不知道正确的语法如何。希望在这里得到任何帮助。谢谢!