검색어로 그룹이 반환 한 레코드 수를 계산하는 방법
예를 들어 :
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
줘
1
1
2
1 + 1 + 1 = 3을 얻으려면 위의 레코드를 계산해야합니다.
검색어로 그룹이 반환 한 레코드 수를 계산하는 방법
예를 들어 :
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
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 COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
이 쿼리를 시도하십시오 :
select top 1 TotalRows = count(*) over ()
from yourTable
group by column1, column2
select *
, concat(cast(cast((ThirdTable.Total_Records_in_Group * 100 / ThirdTable.Total_Records_in_baseTable) as DECIMAL(5,2)) as varchar), '%') PERCENTage
from
(
SELECT FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable, count(*) Total_Records_in_Group
FROM BaseTable FirstTable
JOIN (
SELECT FK1, count(*) AS Total_Records_in_baseTable
FROM BaseTable
GROUP BY FK1
) SecondTable
ON FirstTable.FirstField = SecondTable.FK1
GROUP BY FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable
ORDER BY FirstTable.FirstField, FirstTable.SecondField
) ThirdTable
SQL Server에서 COUNT OVER (PARTITION BY {column to group by}) 파티셔닝 기능을 사용하는 것은 어떻습니까?
예를 들어, ItemID별로 제품 판매를 그룹화하고 각 고유 한 ItemID의 수를 원하면 다음을 사용하십시오.
SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}
이 방법을 사용하는 경우 전체 목록을 반환하려는 경우 GROUP BY를 그림에서 벗어날 수 있습니다 (밴드없이 보려고하는 전체 항목 수를 알아야하는 경우 보고서 밴딩을 수행 할 수 있음) 전체 데이터 세트 (예 : Reporting Services)를 표시합니다.
BandedItemCount
정확히 어떤 가치가 포함됩니까? 출력 행간에 차이가 있습니까? 질문자는 고유 한 그룹화 수준을 찾고 있습니다.