반응형
사용자 정의 기준을 충족하는 각 그룹에서 레코드를 선택하는 MySQL 쿼리
사용자 정의 기준을 충족하는 각 그룹에서 레코드를 선택하는 쿼리를 찾고 있습니다.다음 표로 설명할 수 있습니다.
CREATE TABLE sample_table
(
id INT UNSIGNED AUTO_INCREMENT,
categoryID INT,
weight INT,
PRIMARY KEY(id)
);
INSERT INTO sample_table(categoryID, weight) VALUES(1, 3), (1, 5), (1, 2), (2, 5), (2, 3), (2, 9), (3, 5), (3, 3), (3, 3);
단순.GROUP BY categoryID
query는 다음과 같이 각 그룹의 첫 번째 레코드를 반환합니다.
SELECT * FROM sample_table GROUP BY categoryID;
+----+------------+--------+
| id | categoryID | weight |
+----+------------+--------+
| 1 | 1 | 3 |
| 4 | 2 | 5 |
| 7 | 3 | 5 |
+----+------------+--------+
각 그룹의 마지막 레코드를 반환하려면 다음 방법을 사용합니다.
SELECT * FROM sample_table WHERE id IN (SELECT MAX(id) FROM sample_table GROUP BY categoryID);
+----+------------+--------+
| id | categoryID | weight |
+----+------------+--------+
| 3 | 1 | 2 |
| 6 | 2 | 9 |
| 9 | 3 | 3 |
+----+------------+--------+
그러나 내가 원하는 것은 가장 높은 값을 가진 레코드를 선택하는 것이다.weight
각 그룹의 필드따라서 출력은 다음과 같습니다.
+----+------------+--------+
| id | categoryID | weight |
+----+------------+--------+
| 2 | 1 | 5 |
| 6 | 2 | 9 |
| 7 | 3 | 3 |
+----+------------+--------+
제안해 주십시오.GROUP BY categoryID
위의 출력을 출력하는 쿼리.
MySQL 8+에서 이 작업을 수행하는 "현대식" 방법은ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY categoryID ORDER BY weight DESC) rn
FROM sample_table
)
SELECT id, categoryID, weight
FROM cte
WHERE rn = 1;
이전 버전에서는 가입 방식을 사용할 수 있습니다.
SELECT t1.id, t1.categoryID, t1.weight
FROM sample_table t1
INNER JOIN
(
SELECT categoryID, MAX(weight) AS max_weight
FROM sample_table
GROUP BY categoryID
) t2
ON t2.categoryID = t1.categoryID AND
t2.max_weight = t1.weight;
저는 다음을 원합니다.
SELECT id, categoryID, weight
FROM sample_table ret
WHERE NOT EXISTS (
SELECT *
FROM sample_table witness
WHERE witness.categoryID = ret.categoryID
AND witness.weight > ret.weight
);
일반적으로 관련된 서브쿼리를 권장합니다.
select s.*
from sample_table s
where s.weight = (select max(s2.weight)
from sample_table s2
where s2.categoryID = s.categoryID
);
대부분의 데이터베이스에서는 퍼포먼스가 매우 우수하며 인덱스를 이용할 수 있습니다.sample_table(categoryId, weight)
.
언급URL : https://stackoverflow.com/questions/65192961/mysql-query-to-select-a-record-from-each-group-that-meets-a-user-defined-criteri
반응형
'programing' 카테고리의 다른 글
ALTER 테이블 - MySQL에 자동 증가 추가 (0) | 2022.10.30 |
---|---|
Javadoc: HTML 태그가 없는 줄 바꿈? (0) | 2022.10.30 |
다운로드 가능한 파일을 장고에게 제공 (0) | 2022.10.20 |
Windows의 MariaDB - 데이터베이스 엔진을 시작하려고 할 때 이 오류는 무엇입니까? (0) | 2022.10.20 |
gradle을 사용하는 aar 라이브러리에 대해 전이 종속성을 확인할 수 없습니다. (0) | 2022.10.20 |