【问题标题】:mysql using calculated column at where/havingmysql 在 where/have 使用计算列
【发布时间】: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;

PHRASETIMESTAMP 是表格中的列。 代码选择前 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'

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

【问题讨论】:

标签: mysql select alias where having


【解决方案1】:

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; 

【讨论】:

  • 分割分组和排序..就是这样!!我总是两个一起用!!谢谢!
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多