SELECT
p.id AS pod_id,
p.title AS pod_title,
t.id AS topic_id,
t.message AS topic_content,
c.total_work_hour
FROM topic AS t
JOIN (
SELECT topic_id, SUM(work_hour) AS total_work_hour
FROM comment
WHERE commentator = '이메일'
AND work_hour > 0
AND complete = 1
AND is_delete = 0
AND update_date BETWEEN '20240101' AND '20241201'
GROUP BY topic_id
) AS c ON t.id = c.topic_id
JOIN message_board AS p ON p.id = t.message_board_id
WHERE t.complete = 1
AND t.delete_status = 2
AND p.status = 2
UNION ALL
SELECT
p.id AS pod_id,
p.title AS pod_title,
NULL AS topic_id,
NULL AS topic_content,
SUM(c.total_work_hour) AS total_work_hour
FROM topic AS t
JOIN (
SELECT topic_id, SUM(work_hour) AS total_work_hour
FROM comment
WHERE commentator = '이메일'
AND work_hour > 0
AND complete = 1
AND is_delete = 0
AND update_date BETWEEN '20240101' AND '20241201'
GROUP BY topic_id
) AS c ON t.id = c.topic_id
JOIN message_board AS p ON p.id = t.message_board_id
WHERE t.complete = 1
AND t.delete_status = 2
AND p.status = 2
GROUP BY p.id, p.title
ORDER BY pod_title, total_work_hour desc, topic_id;
의 결과는
pod_id pod_title topic_id topic_content total_work_hour
| 2042 | MH 테스트 | 4 | ||
| 2042 | MH 테스트 | 312043 | 테스트 | 4 |
| 2045 | 프로젝트 파드 생성 테스트 | 30 | ||
| 2045 | 프로젝트 파드 생성 테스트 | 311953 | linked | 10 |
| 2045 | 프로젝트 파드 생성 테스트 | 311969 | test | 9 |
| 2045 | 프로젝트 파드 생성 테스트 | 311949 | ee | 4 |
| 2045 | 프로젝트 파드 생성 테스트 | 311966 | dahee.lee 전체공개 토픽을 장성함 태그는 dahee.lee2 지정 | 3 |
| 2045 | 프로젝트 파드 생성 테스트 | 311982 | 안녕하세요 | 2 |
| 2045 | 프로젝트 파드 생성 테스트 | 311995 | M-H 테스트를 하겠습니다. | 2 |
가 나옵니다. 제가 원하는 결과는 아래와 같이 total_work_hour 가 내림차순으로 정렬되길 원합니다..
pod_id pod_title topic_id topic_content total_work_hour
| 2045 | 프로젝트 파드 생성 테스트 | 30 | ||
| 2045 | 프로젝트 파드 생성 테스트 | 311953 | linked | 10 |
| 2045 | 프로젝트 파드 생성 테스트 | 311969 | test | 9 |
| 2045 | 프로젝트 파드 생성 테스트 | 311949 | ee | 4 |
| 2045 | 프로젝트 파드 생성 테스트 | 311966 | dahee.lee 전체공개 토픽을 장성함 태그는 dahee.lee2 지정 | 3 |
| 2045 | 프로젝트 파드 생성 테스트 | 311982 | 안녕하세요 | 2 |
| 2045 | 프로젝트 파드 생성 테스트 | 311995 | M-H 테스트를 하겠습니다. | 2 |
..
| 2042 | MH 테스트 | 4 | ||
| 2042 | MH 테스트 | 312043 | 테스트 | 4 |
WITH message_board AS
(
SELECT 2042 id, 'MH 테스트' title, 2 status
UNION ALL SELECT 2045, '프로젝트 파드 생성 테스트', 2
)
, topic AS
(
SELECT 2042 message_board_id, 312043 id, '테스트' message, 1 complete, 2 delete_status
UNION ALL SELECT 2045, 311953, 'linked', 1, 2
UNION ALL SELECT 2045, 311969, 'test', 1, 2
UNION ALL SELECT 2045, 311949, 'ee', 1, 2
UNION ALL SELECT 2045, 311966, 'dahee.lee 전체공개 토픽을 장성함 태그는 dahee.lee2 지정', 1, 2
UNION ALL SELECT 2045, 311982, '안녕하세요', 1, 2
UNION ALL SELECT 2045, 311995, 'M-H 테스트를 하겠습니다.', 1, 2
)
, comment AS
(
SELECT 312043 topic_id, 4 work_hour, '20240101' update_date, '이메일' commentator, 1 complete, 0 is_delete
UNION ALL SELECT 311953, 10, '20240101', '이메일', 1, 0
UNION ALL SELECT 311969, 9, '20240101', '이메일', 1, 0
UNION ALL SELECT 311949, 4, '20240101', '이메일', 1, 0
UNION ALL SELECT 311966, 3, '20240101', '이메일', 1, 0
UNION ALL SELECT 311982, 2, '20240101', '이메일', 1, 0
UNION ALL SELECT 311995, 2, '20240101', '이메일', 1, 0
)
SELECT pod_id
, pod_title
, topic_id
, CASE WHEN topic_id IS NOT NULL THEN topic_content END topic_content
, total_work_hour
FROM (SELECT p.id AS pod_id
, p.title AS pod_title
, t.id AS topic_id
, t.message AS topic_content
, SUM(c.work_hour) AS total_work_hour
FROM topic t
JOIN comment c
ON t.id = c.topic_id
JOIN message_board p
ON p.id = t.message_board_id
WHERE t.complete = 1
AND t.delete_status = 2
AND p.status = 2
AND c.commentator = '이메일'
AND c.work_hour > 0
AND c.complete = 1
AND c.is_delete = 0
AND c.update_date BETWEEN '20240101' AND '20241201'
GROUP BY p.id, t.id
WITH ROLLUP
HAVING p.id IS NOT NULL
) a
ORDER BY SUM(total_work_hour) OVER(PARTITION BY pod_id) DESC
, pod_id
, total_work_hour DESC
, topic_id
;