如何加入静态值并将它们用作 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
现在我想将它们分组到预定义的组中,例如
NULL
less than 20
greater than 20
如何使用一组静态的预定义值 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);
我创建了一个 SELECT
语句,我在其中获取数据库中从现在到特定日期的时差。
SELECT
`username`,
TIMESTAMPDIFF(HOUR, `a_date`, NOW()) AS `timediff`
FROM
`User`
...结果类似于
username | timediff
-------------------
john | 441
henry | 1624
mike | 4
kyle | NULL
现在我想将它们分组到预定义的组中,例如
NULL
less than 20
greater than 20
如何使用一组静态的预定义值 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);