programing

그룹별로 반환된 레코드 수:

elecom 2023. 4. 8. 07:57
반응형

그룹별로 반환된 레코드 수:

쿼리별로 그룹에 의해 반환된 레코드 수를 카운트하려면 어떻게 해야 합니까?

예:

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

또 다른 솔루션은 고유 개수를 사용하는 것입니다.

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 스테이트먼트를 nest로 하는 다른 모든 사람의 솔루션이 좋은지도 잘 모르겠습니다.하지만 나는 이것이 코딩의 관점에서 더 우아하다고 생각한다.

서브쿼리 없이 같은 것을 달성하려고 노력했더니 아래와 같이 원하는 결과를 얻을 수 있었습니다.

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

그럼 어떻게 해?

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

CTE가 나를 위해 일했다:

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

select COUNT(col1)
from cte;

포스트그레SQL 이 기능은 다음과 같습니다.

select count(count.counts) 
from 
    (select count(*) as counts 
     from table 
     group by concept) as count;

다음 쿼리를 사용해 보십시오.

select top 1 TotalRows = count(*) over () 
from yourTable
group by column1, column2

다음과 같은 작업을 할 수 있습니다.

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

아래의 코드를 실행할 수 있습니까?오라클에서 작동했습니다.

SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4

아래 질문에서도 얻을 수 있습니다.

select column_group_by,count(*) as Coulm_name_to_be_displayed from Table group by Column;

-- For example:
select city,count(*) AS Count from people group by city

내가 한 일

SELECT COUNT(OwnerID) FROM (SELECT OwnerID FROM #resultsTable GROUP BY OwnerID) AS c

SQL Server에서 COUNT OVER(PARTION BY {column to group by}) 파티션 기능을 사용하는 것은 어떻습니까?

예를 들어 제품 판매를 항목별로 그룹화하려는 경우ID 및 각 개별 항목의 개수를 원합니다.ID, 간단히 사용:

SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}

이 방법을 사용하면 GROUP BY를 그림에서 제외할 수 있습니다.이 경우 전체 목록을 반환할 수 있습니다(전체 데이터 세트를 표시할 필요 없이 전체 항목 수를 알아야 하는 경우 보고서 밴딩을 수행할 수 있습니다).Reporting Services).

PrestoDb의 경우 FirstField는 여러 값을 가질 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/5146978/count-number-of-records-returned-by-group-by

반응형