如何加入静态值并将它们用作 GROUP BY 标识符?

How can I JOIN static values and use them as GROUP BY identifier?

我创建了一个 SELECT 语句,我在其中获取数据库中从现在到特定日期的时差。

SELECT
    `username`,
    TIMESTAMPDIFF(HOUR, `a_date`, NOW()) AS `timediff`
FROM
    `User`

...结果类似于

username | timediff
-------------------
john     |      441
henry    |     1624
mike     |        4
kyle     |     NULL

现在我想将它们分组到预定义的组中,例如

如何使用一组静态的预定义值 JOIN 上述结果以及如何将这些值用作我的分组标识符?

group | amount
--------------
NULL  |      1
lt 20 |      1
gt 20 |      2

您可以将 case 语句与 group by 一起使用:

SELECT (CASE WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) < 20 THEN 'lt 20'
             WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) >= 20 THEN 'gt 20'
        END) as grp, COUNT(*)
FROM `User`
GROUP BY grp;

附带说明:我通常在 group by 中重复 case 语句,因为许多数据库不允许那里的列别名:

SELECT (CASE WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) < 20 THEN 'lt 20'
             WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) >= 20 THEN 'gt 20'
        END) as grp, COUNT(*)
FROM `User`
GROUP BY (CASE WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) < 20 THEN 'lt 20'
               WHEN TIMESTAMPDIFF(HOUR, `a_date`, NOW()) >= 20 THEN 'gt 20'
          END);