반응형
첫번째결과만선택하세요
저는 다음과 같은 질문을 작성했습니다.
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL
FROM PURCHASE GROUP BY CLIENTNO) TOTALS
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO AND ROWNUM <= 1
ORDER BY TOTALS.TOTAL DESC;
하지만 그것은 나에게 틀린 답을 주고 있지만, 만약 내가 그것을 제거한다면.ROWNUM <= 1
절, 그러면 정답은 결과 집합의 맨 위에 있습니다.
그렇다면 이 쿼리에서 무엇을 변경하여 정답을 도출할 수 있습니까?
고마워, 알렉스.
편집: 쿼리가 결과 집합의 첫 번째 결과만 반환하기를 원한다는 것을 잊었습니다.
그ROWNUM
필터는 정렬 전에 적용됩니다.당신이 해야 할 일은 다음과 같습니다.
SELECT * FROM (
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL
FROM PURCHASE GROUP BY CLIENTNO) TOTALS
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO
ORDER BY TOTALS.TOTAL DESC
)
WHERE ROWNUM <= 1
다른 외부 쿼리에서 행 번호를 감습니다.
select * from (
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL FROM PURCHASE GROUP BY CLIENTNO) TOTALS
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO ORDER BY TOTALS.TOTAL DESC)
where ROWNUM <= 1;
이를 찾은 MySQL 사용자의 경우 ROW_NUMBER()를 사용하여 다음과 같은 결과를 얻을 수 있습니다.
WITH ranked AS (
SELECT
ROW_NUMBER() OVER (
PARTITION BY CLIENTNO
ORDER BY TOTALS.TOTALS
) ROWNUM,
CLIENT.CLIENTNO,
.
. )
SELECT * FROM ranked
WHERE ROWNUM <=1
몇 가지 유용한 정보: https://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function 및 https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number
언급URL : https://stackoverflow.com/questions/7834081/select-first-result-only
반응형
'programing' 카테고리의 다른 글
오류 "adb 연결이 중단되었으며 심각한 오류가 발생했습니다." (0) | 2023.10.05 |
---|---|
우커머스 체크아웃 청구 발송 필드에서 기본 선택 상태 제거 (0) | 2023.10.05 |
봄콩 스코프 (0) | 2023.10.05 |
Oracle 데이터베이스 내에서 Long data type을 검색하는 가장 좋은 방법은 무엇입니까? (0) | 2023.10.05 |
시작 시 번들 전달 활동()? (0) | 2023.09.25 |