code

GROUP BY 쿼리로 행 수 가져 오기

codestyles 2020. 12. 29. 07:07
반응형

GROUP BY 쿼리로 행 수 가져 오기


효과에 대한 질문이 있습니다.

SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

이 쿼리가 LIMIT없이 반환되는 많은 총 행을 알고 싶습니다 (따라서 페이지 매김 정보를 표시 할 수 있음).

일반적으로 다음 쿼리를 사용합니다.

SELECT COUNT(t3.id) FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id

그러나 GROUP BY는 COUNT의 의미를 변경하고 대신 각 그룹의 고유 한 t3.id 값 수를 나타내는 행 집합을 얻습니다.

GROUP BY를 사용할 때 총 행 수를 계산하는 방법이 있습니까? 값이 페이지가 매겨져 있기 때문에 행의 하위 집합 만 필요하기 때문에 전체 쿼리를 실행하고 행 수만 계산하는 것을 피하고 싶습니다. 나는 MySQL 5를 사용하고 있지만 이것은 꽤 일반적이라고 생각합니다.


MySQL에는 좋은 솔루션이 있습니다.

키워드 SELECT 바로 뒤에 SQL_CALC_FOUND_ROWS 키워드를 추가합니다.

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20

그런 다음 FOUND_ROWS () 함수를 사용하여 다른 쿼리를 실행합니다.

SELECT FOUND_ROWS();

LIMIT 절이없는 행 수를 반환해야합니다.

자세한 내용은이 페이지를 확인하십시오. http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows


"다른 것들의 무리"는 모두 집합체입니까? GROUP BY에는 t3.id 만 있기 때문에 그렇게 가정합니다. 이 경우 작동합니다.

SELECT
     COUNT(DISTINCT t3.id)
FROM...

물론 다른 옵션은 다음과 같습니다.

SELECT
     COUNT(*)
FROM
     (
     <Your query here>
     ) AS SQ

저는 MySQL을 사용하지 않으므로 이러한 쿼리가 거기에서 작동하는지 여부를 모르겠습니다.


하위 쿼리 사용 :

SELECT COUNT(*) FROM    
(
SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
)    
as temp;

그래서 temp는 행의 수를 포함합니다.


MySQL을 사용하고 있으므로 해당 기능을 사용하여 정확하게 수행 할 수 있습니다.

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff 
FROM t1, t2, t3 
WHERE (associate t1,t2, and t3 with each other) 
GROUP BY t3.id 
LIMIT 10,20;

SELECT FOUND_ROWS(); -- for most recent query

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows


주어진 모든 ans는 쿼리를 실행 한 다음 개수를 찾습니다. Distinct는 대규모 데이터 세트에서 그룹 별보다 확실히 느립니다.

Best way to find the count of group by is below

SELECT 
    sum(1) as counttotal
FROM (
    Your query with group by operator
) as T

This will find the count while calculating group by.

ReferenceURL : https://stackoverflow.com/questions/364825/getting-the-number-of-rows-with-a-group-by-query

반응형