반응형
각 그룹내에서 랜덤한 행, 또는 특정조건으로 정렬을 해야하는 경우
나는 seedIdx컬럼으로 GROUP BY를 하고, 그룹내에서 stage를 랜덤하게 추출하고 싶다.
SELECT *
FROM PlantImg;
아주 단순하게 생각해서, 정렬(ORDER BY)과 그룹화(GROUP BY)를 동시에 해보면
SELECT idx, seedIdx, stage
FROM PlantImg
GROUP BY seedIdx
ORDER BY RAND();
이렇게 GROUP BY가 먼저 수행되기때문에 그루핑된 행들이 정렬되게 된다.
그래서 stage는 내부에서 정렬이 되지 않고 모두 각 그룹의 첫번째 행인 stage=1이 나오게 되었다.
해결방법
SELECT seedIdx,
(SELECT stage FROM PlantImg
WHERE seedIdx = PI.seedIdx ORDER BY RAND() LIMIT 1) AS stage
FROM PlantImg PI
GROUP BY seedIdx;
이렇게하면, SELECT문에서 먼저 정렬하여 1개의 행만 뽑은 뒤 GROUP BY를 수행하기 때문에
결과적으로 각 그룹 내에서 정렬된 결과를 얻을 수 있다.
나는 랜덤하게 정렬해야하여 ORDER BY RAND()를 사용했지만, ORDER BY 뒤에 다른 컬럼을 넣어도 가능하다.
반응형
'🔙 Backend > 🗄️ Database' 카테고리의 다른 글
[Mysql] DB스키마, 데이터 복제하기 (0) | 2024.02.05 |
---|---|
[Mysql] 날짜 시간 더하기, 빼기 (DATE_ADD, DATE_SUB) (0) | 2022.04.04 |
[Mysql] mysql에서 현재 연결된 connection 찾기 (0) | 2022.03.11 |
[MySql] 숫자/문자 자리수 맞추기 (LPAD, RPAD) (0) | 2022.03.02 |
[Mysql] 현재 날짜 기준으로 특정기간만 가져오기 (0) | 2021.05.29 |