mysql - SQL GROUP BY语句只能用number来分组?

标签 mysql sql

我现在正在学习SQL,遇到这样的查询我有点迷茫:

SELECT CASE 
        WHEN url like '%abc.com%'THEN 'abc'
      When url like '%def.com%'THEN 'def'
      When url like '%smiley.com%' THEN 'Smiley'
      Else 'others'
      End AS 'sites', count(*)
    FROM websites_sources
    GROUP BY 1;

上面的查询工作正常,但前提是 GROUP BY 语句使用 1。如果我写 Group BY 'sites',结果只显示 'others' 和所有行的总数(而不是 'others' 的计数' 仅和其他网站)。

我的问题是,GROUP BY语句只能用数字表示分组,不能用列名吗?

感谢您的帮助!

最佳答案

仅对字符串和日期常量使用单引号。切勿对列别名使用单引号。你只会把自己弄糊涂。

试试这个:

SELECT (CASE WHEN url like '%abc.com%' THEN 'abc'
             WHEN url like '%def.com%' THEN 'def'
             WHEN url like '%smiley.com%' THEN 'Smiley'
             ELSE 'others'
         END) AS sites,
        count(*)
FROM websites_sources
GROUP BY sites;

您按字符串 'sites' 分组,这是一个常量,而不是名为 sites 的列。

关于mysql - SQL GROUP BY语句只能用number来分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53385542/

相关文章:

php - 使用通配符比较 2 个表

sql - 计算开始日期和当前日期之间的工作日

mysql - 根据结果​​设置极限变量?

sql - 恢复未保存的 SQL 查询脚本

php - 查询按 "date"字段排序的两张表

php - MySQL使用foreach将多个图像连接到相册并在页面上显示

mysql - 在字符串mysql中搜索ID?

C# 获取自动递增的插入id

mysql - 从分组消息 SQL 中返回最后一条消息

sql - 如何删除子查询返回的所有记录?