【发布时间】:2012-06-28 12:58:19
【问题描述】:
我有一个问题,如何在 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 服务器版本相对应的手册,以获取在 'HAVING B>1 附近使用的正确语法 在第 5 行限制 16'
我不知道正确的语法如何。 希望在这里得到任何帮助。 谢谢!
【问题讨论】:
-
@Sammaye 正在阅读 stackoverflow.com/questions/942571/… ...难道男人,这不可能吗?
-
不支持别名列,是的;根据 WHERE 的文档
-
@Sammaye 有没有办法在没有别名列的情况下解决这个问题?我读了很多关于使用
having为此... -
有可能.. 看看@Romil 的回答
标签: mysql select alias where having