SQL 쿼리에서 LEFT JOIN 순서를 정렬하는 방법
네, 구글에서 미친 듯이 답변을 검색해 봤지만, 이 문제를 해결할 수 없었기 때문에 누군가 도움을 주셨으면 합니다.
예를 들어 매우 간단한 사용자 테이블이 있다고 가정해 보겠습니다.
id | userName
3 Michael
4 Mike
5 George
그리고 다른 표로 그들의 차와 가격을 가지고 있습니다.
id | belongsToUser | carPrice
1 4 5000
2 4 6000
3 4 8000
여기서 해야 할 일은 다음과 같습니다(자유롭게 다시 쓰십시오).
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
반환되는 내용:
Mike | 5000
하지만 나는 처음 발견된 엔트리가 아니라 특정 사용자의 가장 비싼 차가 필요하다.
그래서 질문:왼쪽 조인 테이블을 carPrice로 주문하도록 설정하려면 어떻게 해야 합니까?
사용해보십시오.MAX
와 함께GROUP BY
.
SELECT u.userName, MAX(c.carPrice)
FROM users u
LEFT JOIN cars c ON u.id = c.belongsToUser
WHERE u.id = 4;
GROUP BY u.userName;
상세 정보GROUP BY
그룹 기준 절은 열별 그룹의 고유한 조합을 기준으로 선택한 레코드를 그룹으로 분할하는 데 사용됩니다.그러면 집계 함수를 사용할 수 있습니다(예:각 레코드 그룹에 차례로 적용되는 MAX, MIN, SUM, AVG 등).데이터베이스는 각 그룹에 대해 단일 결과 레코드를 반환합니다.
예를 들어, 다음과 같은 표에 시간과 장소에 따른 온도를 나타내는 일련의 레코드가 있는 경우:
Location Time Temperature
-------- ---- -----------
London 12:00 10.0
Bristol 12:00 12.0
Glasgow 12:00 5.0
London 13:00 14.0
Bristol 13:00 13.0
Glasgow 13:00 7.0
...
다음으로 장소별로 최대 온도를 구하려면 온도 레코드를 그룹으로 분할해야 합니다.이 그룹에서는 특정 그룹의 각 레코드가 같은 위치를 가집니다.그런 다음 각 그룹의 최고 온도를 구하려고 합니다.이를 위한 쿼리는 다음과 같습니다.
SELECT Location, MAX(Temperature)
FROM Temperatures
GROUP BY Location;
이전 MySQL 버전이면 충분합니다.
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN (SELECT * FROM `cars` ORDER BY `carPrice`) as `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
현재 MariaDB를 사용하는 경우 서브쿼리는 제한되어야 합니다.
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN (SELECT * FROM `cars` ORDER BY `carPrice` LIMIT 18446744073709551615) as `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
다른 몇 가지 답변은 MAX를 사용하여 해결 방법을 제시합니다.Agregate 함수를 사용할 수 없거나 수행이 불가능한 시나리오가 있습니다.
제가 자주 사용하는 대안은 조인에서 연관된 하위 쿼리를 사용하는 것입니다.
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.id = (
SELECT id FROM `cars` WHERE BelongsToUser = users.id ORDER BY carPrice DESC LIMIT 1
)
WHERE `id`='4'
이렇게 하면 사용자가 가장 비싼 차를 얻을 수 있습니다.
SELECT users.userName, MAX(cars.carPrice)
FROM users
LEFT JOIN cars ON cars.belongsToUser=users.id
WHERE users.id=4
GROUP BY users.userName
그러나 이 문구를 보면 모든 자동차 가격을 다음과 같이 분류하고 싶어한다는 생각이 듭니다.
그래서 질문:왼쪽 조인 테이블을 carPrice로 주문하도록 설정하려면 어떻게 해야 합니까?
이 경우 다음을 시도해 보십시오.
SELECT users.userName, cars.carPrice
FROM users
LEFT JOIN cars ON cars.belongsToUser=users.id
WHERE users.id=4
GROUP BY users.userName
ORDER BY users.userName ASC, cars.carPrice DESC
이것을 시험해 보세요.
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
ORDER BY `carPrice` DESC
LIMIT 1
펠릭스
언급URL : https://stackoverflow.com/questions/5355585/how-to-sort-order-of-left-join-in-sql-query
'IT' 카테고리의 다른 글
고정 헤더에 대해 조정하기 위해 html 앵커 오프셋 (0) | 2023.01.15 |
---|---|
TIMESTAMP 열을 ZonedDateTime JPA 엔티티 속성에 매핑하려면 어떻게 해야 합니까? (0) | 2023.01.15 |
Chrome Dev Tools - javascript 수정 및 새로고침 (0) | 2023.01.15 |
명령줄 mac에서 mysql에 액세스할 수 없습니다. (0) | 2023.01.15 |
PHP 5: 지속 vs 정적 (0) | 2023.01.15 |