반응형
날짜당 여러 개가 존재하는 경우 개최되는 레슨/이벤트 수를 보다 간결하게 계산하는 방법
이는 질문을 위한 예이지만 기본적으로 다음과 유사한 MySQL 데이터가 있습니다.
아이디 | 레슨 날짜 | 사용자 ID | 주제 |
---|---|---|---|
1234 | 2021-01-11 | 1 | 스페인어 |
1235 | 2021-01-11 | 1 | 스페인어 |
1236 | 2021-01-11 | 2 | 스페인어 |
1237 | 2021-01-12 | 1 | 음악 |
1238 | 2021-01-12 | 1 | 음악 |
1239 | 2021-01-12 | 1 | 음악 |
1240 | 2021-01-12 | 3 | 음악 |
1241 | 2021-01-12 | 3 | 음악 |
1242 | 2021-01-13 | 2 | 화학 |
1243 | 2021-01-13 | 3 | 화학 |
1244 | 2021-01-13 | 2 | 스페인어 |
1245 | 2021-01-14 | 3 | 수학 |
이는 다음을 의미하는 것으로 해석됩니다.
- 1명은 1월 11일에 두 번의 스페인어 수업을 받았습니다(2명은 그 중 하나에 참석했습니다).
- 1명은 1월 12일에 3번의 음악 수업이 있었습니다 (3명은 그 중 2번의 수업에 참석했습니다)
- 1월 13일에 2인과 3인은 화학 수업을 공유했고, 2인만 그날 스페인어를 갔습니다.
원하는 출력을 얻기 위해 현재 다음과 같은 4단계 그룹화를 사용하고 있습니다.환자-개인-날짜별 카운트로 시작하여 날짜별 최대 환자 수, 환자별 총 수, 마지막으로 각 총 수에 대한 제목을 나열합니다.
SELECT LessonsHeld, GROUP_CONCAT(Subject ORDER BY Subject SEPARATOR ', ') AS Subjects FROM
(SELECT Subject, SUM(DayCount) AS LessonsHeld FROM
(SELECT Subject, LessonDate, MAX(PersonDayCount) AS DayCount FROM
(SELECT Subject, LessonDate, PersonID, COUNT(*) AS PersonDayCount FROM `lessons`
GROUP BY Subject, LessonDate, PersonID) x
GROUP BY Subject, LessonDate) y
GROUP BY Subject) z
GROUP BY LessonsHeld
ORDER BY LessonsHeld DESC
출력:
[LessonsHeld] [Subjects]
3 Music, Spanish
1 Chemistry, Mathematics
사람들의 여러 이벤트/클래스 등을 더 간결하게 셀 수 있는 방법이 있습니까?특정 날짜에 개최됩니까?4단계의GROUP BY
여기서는 좀 극단적으로 보입니다.
단일 이벤트에 대한 ID가 여러 개인 이유는 각 참석자가 자신의 데이터를 입력하고 삭제할 수 있기 때문입니다.저는 시작 시간을 기억하거나 서로의 출석률을 맞추는 것과 같은 추가적인 일을 시키는 것보다 데이터 입력을 최소화하는 데 중점을 두었습니다.
MySql 8.0은 창 기능을 지원하므로 조금 더 짧을 수 있습니다.
SELECT LessonsHeld, GROUP_CONCAT(Subject ORDER BY Subject SEPARATOR ', ') AS Subjects
FROM
(SELECT Subject, SUM(DayCount) AS LessonsHeld
FROM
(SELECT Subject, LessonDate,
max(COUNT(*)) over(partition by Subject, LessonDate) AS DayCount,
row_number() over(partition by Subject, LessonDate order by PersonID) rn
FROM `lessons`
GROUP BY Subject, LessonDate, PersonID
) x
where rn = 1
GROUP BY Subject) z
GROUP BY LessonsHeld
ORDER BY LessonsHeld DESC;
더 나은 성능을 발휘할지 확신할 수 없습니다.
언급URL : https://stackoverflow.com/questions/70411931/more-concise-way-to-count-no-of-lessons-events-held-if-multiple-per-date-exist
반응형
'programing' 카테고리의 다른 글
루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까? (0) | 2023.06.05 |
---|---|
onActivityResult가 fragment에서 호출되지 않습니다. (0) | 2023.06.05 |
행 이름을 첫 번째 열로 변환하려면 어떻게 해야 합니까? (0) | 2023.06.05 |
파이어베이스:프로덕션 APN 인증서를 업로드할 수 없습니다. (0) | 2023.06.05 |
Firebase 아키텍처 x86_64에 대한 정의되지 않은 기호 (0) | 2023.06.05 |