[sql-server] 그룹별로 반환 된 레코드 수

검색어로 그룹이 반환 한 레코드 수를 계산하는 방법

예를 들어 :

select count(*) 
from temptable
group by column_1, column_2, column_3, column_4

1
1
2

1 + 1 + 1 = 3을 얻으려면 위의 레코드를 계산해야합니다.



답변

다른 COUNT의 OVER 절을 사용하여 한 쿼리에서 둘 다 수행 할 수 있습니다.

select
    count(*) RecordsPerGroup,
    COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4


답변

가장 간단한 해결책은 파생 테이블을 사용하는 것입니다.

Select Count(*)
From    (
        Select ...
        From TempTable
        Group By column_1, column_2, column_3, column_4
        ) As Z

또 다른 해결책은 Count Distinct를 사용하는 것입니다.

Select ...
    , ( Select Count( Distinct column_1, column_2, column_3, column_4 )
        From TempTable ) As CountOfItems
From TempTable
Group By column_1, column_2, column_3, column_4


답변

나는 그것이 늦다는 것을 알고 있지만 아무도 이것을 제안하지 않았다.

select count ( distinct column_1, column_2, column_3, column_4)
from   temptable

이것은 적어도 Oracle에서 작동합니다. 현재 테스트 할 다른 데이터베이스가 없으며 T-Sql 및 MySQL 구문에 익숙하지 않습니다.

또한 파서 에서이 방법을 사용하는 것이 더 효율적인지 또는 select 문을 중첩시키는 다른 모든 솔루션이 더 나은지 여부는 확실하지 않습니다. 그러나 나는 이것이 코딩 관점에서보다 우아하다고 생각합니다.


답변

하위 쿼리없이 동일한 결과를 얻으려고했지만 아래와 같이 필요한 결과를 얻을 수있었습니다.

SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4


답변

CTE가 나를 위해 일했습니다.

with cte as (
  select 1 col1
  from temptable
  group by column_1
)

select COUNT(col1)
from cte;


답변

어때요 :

SELECT count(column_1)
FROM
    (SELECT * FROM temptable
    GROUP BY column_1, column_2, column_3, column_4) AS Records


답변

당신은 할 수 있습니다 :

select sum(counts) total_records from (
    select count(*) as counts
    from temptable
    group by column_1, column_2, column_3, column_4
) as tmp