[SQL] SELECT는 각 그룹에서 한 행을 반환 쿼리
SQLSELECT는 각 그룹에서 한 행을 반환 쿼리
이 제품 테이블 및 기록의 몇 백만이있다.
일반적으로 I 사용 : 나는 다음과 같은 목록 기록 할 :
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
현재 SQL 성능 문제가 발생. 이 같은 출력 결과에 대한 SQL 쿼리가 필요합니다.
해결법
-
==============================
1.해결할 수있는 문제이, 나는 각 STORE_ID에 대한 (열이 AUTO_INCREMENTed이라고 가정) 별도 최신 ID를 가져 하위 쿼리에 합류하는 것입니다 추천 하나에 많은 대안이있다.
해결할 수있는 문제이, 나는 각 STORE_ID에 대한 (열이 AUTO_INCREMENTed이라고 가정) 별도 최신 ID를 가져 하위 쿼리에 합류하는 것입니다 추천 하나에 많은 대안이있다.
SELECT a.* FROM tableName a INNER JOIN ( SELECT store_ID, MAX(ID) max_ID FROM tableName GROUP BY store_ID ) b ON a.store_ID = b.store_ID AND a.ID = b.max_ID
ID 및 STORE_ID : 더 나은 성능을 위해,이 컬럼에 인덱스를 가지고해야합니다.
UPDATE 1
당신이 모든 기록에 대한 제한이하려는 경우, 다음이를 사용,
SELECT ID, product_Name, store_ID FROM tableName a WHERE ( SELECT COUNT(*) FROM tableName b WHERE b.store_ID = a.store_ID AND b.ID >= a.ID ) <= 2;
-
==============================
2.
SELECT store_id,id,product_name FROM table_name WHERE id IN (SELECT MAX(id) FROM table_name GROUP BY store_id) ORDER BY id
이 작업을해야합니다 당신은 당신의 REQ에 따라 하나 STORE_ID 또는 ID를 기준으로 주문할 수 있습니다.
-
==============================
3.이 좀보십시오 :
이 좀보십시오 :
SELECT * FROM YOURTABLE B JOIN (SELECT MAX(ID) MX FROM YOURTABLE GROUP BY STORE_ID) A ON A.STORE_ID = B.STORE_ID AND B.ID = A.MX GROUP BY B.STORE_ID ;
from https://stackoverflow.com/questions/14375099/select-query-return-1-row-from-each-group by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 적색 편이에 SQL 함수 generate_series ()을 사용하여 (0) | 2020.04.21 |
---|---|
[SQL] 그것은 MySQL의에서 인덱싱 된 뷰를 가질 수 있습니까? (0) | 2020.04.21 |
[SQL] 어떻게 SQL 매개 변수를 전달하고, 내가 필요한 이유는 무엇입니까? (0) | 2020.04.21 |
[SQL] 선택 카운트 (ID) 또는 존재 (...) : 항목의 존재 여부가 있는지 확인하는 가장은 무엇입니까? (0) | 2020.04.21 |
[SQL] 어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다? (0) | 2020.04.21 |