MySQL GROUP_CONCAT 출력을 여러 행으로 분할하는 더 좋은 방법이 있습니까?예를 들어 매 6개의 레코드 뒤에 말합니다.
아래의 시나리오를 성공적으로 달성했습니다.
SELECT GROUP_CONCAT(coursecode)
FROM (
SELECT coursecode FROM Table18
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
UNION
SELECT coursecode FROM Table17
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
) s
WHERE coursecode
NOT IN (
SELECT coursecode
FROM Table18
WHERE regno = 'StudentXYZ'
AND (ca_score + exam_score) >= 40
UNION
SELECT coursecode
FROM Table17
WHERE regno = 'StudentXYZ'
AND (ca_score + exam_score) >= 40
)
이것은 아주 잘 작동합니다!다음은 샘플 결과입니다.
+----------------------------------------------------------------------------------------------------------+
| GROUP_CONCAT(coursecode) |
+----------------------------------------------------------------------------------------------------------+
| EDU222,EDU497,POS302,POS405,POS420,EDU224,EDU311,EDU312,EDU313,GST304,GST305,POS304,POS305,POS308,POS309 |
+----------------------------------------------------------------------------------------------------------+
하지만 이것이 제가 이루고 싶은 것입니다.
+-------------------------------------------------+
| GROUP_CONCAT(coursecode) |
+-------------------------------------------------+
| EDU222, EDU497, POS302, POS405, POS420, EDU224, |
| EDU311, EDU312, EDU313, GST304, GST305, POS304, |
| POS305, POS308, POS309 |
+-------------------------------------------------+
좋은 의견이라도 있나?아니면 이 문제를 해결하는 더 나은 방법?
다음과 같은 작업을 수행할 수 있습니다(MySQL 5.7 / MariaDB < 10.2 지원).
SELECT GROUP_CONCAT(coursecode)
FROM (
SELECT coursecode, @gn:=@gn+1, CEIL(@gn / 6) gn
FROM (
SELECT coursecode FROM Table18
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
UNION
SELECT coursecode FROM Table17
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
) s, (SELECT @gn:=0)gn
WHERE coursecode NOT IN (
SELECT coursecode
FROM Table18
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) >= 40
UNION
SELECT coursecode
FROM Table17
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) >= 40
)
) group_view GROUP BY group_view.gn
MySQL 8.0 / MariaDB 10.2 이후에는 변수 대신 동일한 논리를 사용할 수 있습니다.따라서 쿼리는 다음과 같습니다.
SELECT GROUP_CONCAT(coursecode)
FROM (
SELECT coursecode, CEIL(ROW_NUMBER() OVER (ORDER BY code ASC) / 6) gn
FROM (
SELECT coursecode FROM Table18
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
UNION
SELECT coursecode FROM Table17
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) <= 39
) s
WHERE coursecode NOT IN (
SELECT coursecode
FROM Table18
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) >= 40
UNION
SELECT coursecode
FROM Table17
WHERE regno = 'StudentXYZ' AND (ca_score + exam_score) >= 40
)
) group_view GROUP BY group_view.gn
언급URL : https://stackoverflow.com/questions/57482555/is-there-a-better-way-to-split-mysql-group-concat-output-into-multiple-rows-for
'programing' 카테고리의 다른 글
background-size: 표지 background-size: 표지 background-size: 표지 또는또는또는 (0) | 2023.08.15 |
---|---|
Java-config 클래스를 XML-config로 가져와서 두 컨텍스트에 빈이 있도록 하는 방법은 무엇입니까? (0) | 2023.08.15 |
오라클 11g에서 "선택" 쿼리에서 오프셋을 추가하는 방법은 무엇입니까? (0) | 2023.08.15 |
Android에서 진행률 표시줄을 사용자 지정하는 방법 (0) | 2023.08.15 |
json에 일반적인 방법으로 존재하는 배열 요소에서 열 형성 (0) | 2023.08.15 |