링크
https://leetcode.com/problems/group-sold-products-by-the-date/description/
문제
Write a solution to find for each date the number of different products sold and their names.
The sold products names for each date should be sorted lexicographically.
Return the result table ordered by sell_date.
The result format is in the following example.
정답
select sell_date,
count(distinct product) as num_sold,
group_concat(distinct product order by product separator ',') as products
from activities
group by sell_date
order by sell_date
새롭게 이해한 내용
1. 기본형 : group_concat(필드명)
2. 구분자 변경 : group_concat(필드명 separator '구분자')
3. 중복제거 : group_concat(distinct 필드명)
4. 문자열 정렬 : group_concat(필드명 order by 필드명)
- GROUP_CONCAT 함수는 SQL에서 그룹화된 데이터의 값을 하나의 문자열로 결합하여 반환하는 데 사용됩니다. 이 함수는 특히 데이터를 요약하거나 특정 형식으로 출력할 때 유용합니다. 아래에 중급 수준의 개발자를 대상으로 주요 개념과 사용법을 설명합니다.
- GROUP_CONCAT의 주요 특징
- 1. 기본 동작:
- 그룹 내의 NULL이 아닌 값을 하나의 문자열로 결합합니다.
- 모든 값이 NULL이거나 매칭되는 행이 없으면 NULL을 반환합니다.
- 2. 결과 길이 제한:
- 반환되는 문자열의 최대 길이는 `group_concat_max_len` 시스템 변수로 제어됩니다. 기본값은 1024입니다.
- 이 길이를 초과하면 결과가 잘립니다. 이 값을 조정하려면 `SET GLOBAL | SESSION group_concat_max_len = val;` 형식으로 설정할 수 있습니다.
- 3. 반환 타입:
- `group_concat_max_len` 값이 512 이하라면 반환 타입은 `VARCHAR` 또는 `VARBINARY`입니다.
- 512보다 크다면 `TEXT` 또는 `BLOB`로 반환됩니다.
- 1. 기본 동작:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
- 주요 옵션
- DISTINCT: 중복된 값을 제거하고 고유한 값만 결합합니다.
- ORDER BY: 결합된 값의 순서를 지정합니다 (ASC 또는 DESC).
- SEPARATOR: 값들 사이에 사용할 구분자를 지정합니다. 기본값은 쉼표(`,`)입니다.
# 기본 사용법
SELECT student_name,
GROUP_CONCAT(test_score)
FROM student
GROUP BY student_name;
# 중복 제거 및 정렬
SELECT student_name,
GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
FROM student
GROUP BY student_name;
GROUP_CONCAT은 데이터를 요약하거나 특정 형식으로 가공할 때 매우 강력한 도구이며, 특히 보고서 생성이나 데이터 시각화 준비 과정에서 유용하게 활용됩니다.
'[업무 지식] > MySQL' 카테고리의 다른 글
[left, right] Weather Observation Station 8 (0) | 2024.11.19 |
---|---|
[REGEXP] Find Users With Valid E-Mails (0) | 2024.11.18 |
[Limit/Offset] Second Highest Salary (0) | 2024.11.18 |
[delete] Delete Duplicate Emails (0) | 2024.11.14 |
[LIKE] Patients With a Condition (0) | 2024.11.14 |