반응형
상황은 이러했다.
회사의 DB를 보여줄 수 없으니 비슷하게 꾸미면
아래 표를 변경하여
이름 | 과일 선택한 순서 | 과일 선택한 시간(오후) |
철수 | 사과, 딸기, 바나나, 키위 | 3시,4시,5시,6시 |
짱구 | 키위, 딸기, 바나나, 수박 | 1시,2시,9시,10시 |
훈이 | 바나나, 멜론, 포도, 블루베리 | 2시,3시,8시,11시 |
다음과 같이 '마지막 선택한 과일', '마지막 선택한 시간' 만 보여달라는 요청사항이었다.
이름 | 마지막 선택한 과일 | 마지막 선택한 시간 |
철수 | 키위 | 6시 |
짱구 | 수박 | 10시 |
훈이 | 블루베리 | 11시 |
해당 sql은 아래와 같이 작성되어 있었다.
SELECT
name AS "이름",
GROUP_CONCAT(pick-fruit ORDER BY id(시간) SEPARATOR ',')
AS "과일 선택한 순서"
GROUP_CONCAT( DATE_FORMAT(DATE_ADD(과일.updatedAt, INTERVAL 9 HOUR), '%Y-%m-%d %H:%i') ORDER BY id(시간) SEPARATOR ',')
AS "과일 선택 시간"
FROM ~~
GROUP BY 과일이름,과일id
적절한 검색어를 입력하지 못해 한참동안 구글링을 하다가
mysql split 이라는 검색어를 통해 SUBSTRING_INDEX를 알게 되었다.
그리고 SUBSTRING_INDEX을 GROUP_CONCAT에도 사용할 수 있어 다음과 같이 작성했다.
SELECT
name AS "이름",
SUBSTRING_INDEX(GROUP_CONCAT(pick-fruit ORDER BY id(시간) SEPARATOR ','),',',-1)
AS "마지막 선택한 과일"
SUBSTRING_INDEX(GROUP_CONCAT( DATE_FORMAT(DATE_ADD(과일.updatedAt, INTERVAL 9 HOUR), '%Y-%m-%d %H:%i') ORDER BY id(시간) SEPARATOR ','),',',-1)
AS "마지막 선택한 시간"
FROM ~~
GROUP BY 과일이름,과일id
SUBSTRING(문자열, 시작 위치, 시작 위치부터 가져올 문자수)
SUBSTRING_INDEX 를 이용하면 '사과, 딸기, 바나나, 키위' 에서 '키위' 만 뽑아올 수 있다.
이름 | 마지막 선택한 과일 | 마지막 선택한 시간 |
철수 | 키위 | 6시 |
짱구 | 수박 | 10시 |
훈이 | 블루베리 | 11시 |
반응형
'개발 > Database' 카테고리의 다른 글
Mysql 비번 초기화 (0) | 2023.07.14 |
---|---|
외부조인 (0) | 2022.03.09 |
DISTINCT 중복된 결과중 1개만 출력 (0) | 2022.03.08 |
내부조인 외부조인 (0) | 2022.03.08 |
MySQL 변수사용 (0) | 2022.02.25 |