반응형
가명일 때는 케이스로 그룹핑을 해주실 수 있나요?
SELECT 문은 'Length'로 별칭된 상태(또는 여러 IF 문을 사용할 수 있음)에서 계산되고 있으며, 결과를 정확하게 그룹화해야 합니다.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;
이 그룹은 모두 '3~4개월'로 귀결되는데, 이는 옳지 않습니다.
당신은 전체를 사용해야 합니다.CASE
에 있는 진술GROUP BY
subquery로 포장하지 않으면 조항입니다.
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
절
저는 바로 같은 문제로 어려움을 겪고 있었는데, 다음과 같이 해결책을 제시했습니다.
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;
다음과 같이 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 1
ORDER BY 1 ASC;
언급URL : https://stackoverflow.com/questions/19096344/can-you-group-by-with-a-case-when-then-alias-name
반응형
'programing' 카테고리의 다른 글
Oracle 데이터 통합업체란 무엇입니까? (0) | 2023.11.07 |
---|---|
RecordSet에서 오류 3001이 발생했습니다. 이유를 알 수 없습니다. (0) | 2023.11.07 |
Wordpress Multisite에서 HTACCCESS를 사용하여 WP-CONTER URL에 하위 디렉토리 추가 (0) | 2023.11.07 |
왜 Py_를 해야 합니까?C에서 Py_None을 반환하기 전에 INCRECF(Py_None)가 필요합니까? (0) | 2023.11.07 |
XElement 네임스페이스(방법?) (0) | 2023.11.07 |