[SQL] 당신은 GROUP BY는 CASE THEN 별칭 이름으로 할 수 있습니까?
SQL당신은 GROUP BY는 CASE THEN 별칭 이름으로 할 수 있습니까?
나는 '길이'로 별명 THEN 상태 (문이 경우 또는 여러 사용할 수 있습니다) 때 SELECT 문이 CASE 계산되고 있고, 나는 결과를 함께 제대로 GROUP해야합니다. 선택은 작동하는 것 같군,하지만 그룹 그룹화 잘못. 여기 내 문은 다음과 같습니다
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;
이 그룹으로 모든 결과 - 옳지 않다 '3 ~ 4 개월'..
해결법
-
==============================
1.당신은 당신이 하위 쿼리에 싸서하지 않는 경우 GROUP BY 절에 전체 CASE 문을 사용해야합니다.
당신은 당신이 하위 쿼리에 싸서하지 않는 경우 GROUP BY 절에 전체 CASE 문을 사용해야합니다.
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;
ORDER BY 절에서도 열 이름 주위에 따옴표를 제거합니다.
-
==============================
2.나는 정확히 같은 문제로 고민하고 여기에 내가 생각 해낸 해결책은 다음과 같습니다
나는 정확히 같은 문제로 고민하고 여기에 내가 생각 해낸 해결책은 다음과 같습니다
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;
from https://stackoverflow.com/questions/19096344/can-you-group-by-with-a-case-when-then-alias-name by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] # 1292 - 잘못된 날짜 값을 '0000-00-00'[중복] (0) | 2020.07.09 |
---|---|
[SQL] 공간 오라클 테이블 열 이름 (0) | 2020.07.09 |
[SQL] 어떻게 2005 SQL Server에서 데이터베이스의 기본 스키마를 설정하는 방법? (0) | 2020.07.09 |
[SQL] "절"평가 순서를 선택합니다 (0) | 2020.07.09 |
[SQL] DECIMAL에 VARCHAR (0) | 2020.07.09 |