Ken*_*Ken 24 mysql sql group-by case
我有一个SELECT语句是从一个CASE WHEN THEN状态(或者可以使用多个IF语句)别名为'Length'计算的,我需要正确地将结果组合在一起.SELECT似乎正在工作,但该组将它们分组错误.这是我的发言:
SELECT CASE
WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
ELSE '>4 Months' END AS 'Length',
COUNT(DISTINCT(person.ID)) AS 'COUNT'
FROM person
INNER JOIN opportunity AS o
INNER JOIN Organization AS org
ON person.EntityID = o.id
AND O.OrganizationID = Org.ID
WHERE person.TitleID = 2
AND o.bID = 1
GROUP BY 'Length'
ORDER BY 'Length' ASC;
Run Code Online (Sandbox Code Playgroud)
这将所有结果分组为'3 - 4个月',这是不对的..
Joh*_*Woo 39
如果未将其包装在子查询CASE中,GROUP BY则需要在子句中使用整个语句.
SELECT CASE
WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
ELSE '>4 Months'
END AS `Length`,
COUNT(DISTINCT(person.ID)) AS `COUNT`
FROM person
INNER JOIN opportunity AS o
ON person.EntityID = o.id
INNER JOIN Organization AS org
ON o.OrganizationID = Org.ID
WHERE person.TitleID = 2
AND o.bID = 1
GROUP BY CASE
WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
ELSE '>4 Months'
END
ORDER BY Length ASC;
Run Code Online (Sandbox Code Playgroud)
还删除ORDER BY子句中列名称周围的单引号.
| 归档时间: |
|
| 查看次数: |
33285 次 |
| 最近记录: |