我现在正在学习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语句只能使用数字进行分组吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53385542/

10-13 00:49