统计group by返回的记录数

问题描述 投票:0回答:15

如何统计一组通过查询返回的记录数,

例如:

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

给我,

1
1
2

我需要统计上面的记录才能得到1+1+1 = 3。

sql-server t-sql count group-by
15个回答
221
投票

您可以在一个查询中使用另一个 COUNT 上的 OVER 子句来执行这两项操作

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

102
投票

最简单的解决方案是使用派生表:

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

32
投票

我知道已经很晚了,但没有人建议这样做:

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

这至少在 Oracle 中有效 - 我目前没有其他数据库可以测试它,而且我对 T-Sql 和 MySQL 语法不太熟悉。

另外,我不完全确定解析器中这样做是否更有效,或者其他人的嵌套 select 语句的解决方案是否更好。但我发现从编码的角度来看这个更优雅。


22
投票

我试图在没有子查询的情况下实现相同的目标,并且能够获得所需的结果,如下所示

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

8
投票

怎么样:

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

5
投票

CTE 对我有用:

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

select COUNT(col1)
from cte;

3
投票

在 PostgreSQL 中,这对我有用:

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

2
投票

尝试这个查询:

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

1
投票

你可以这样做:

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

1
投票

您可以执行下面的代码吗?它在 Oracle 中有效。

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

0
投票

您也可以通过以下查询来获取

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

0
投票

这是我所做的

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

0
投票

在采购订单和发布的临时表中

选择 T1.po , 计数(T1.release_kk)

来自#T1 T1

分组依据 T1.po


-1
投票

在 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 排除在外 - 假设您想要返回整个列表(因为您可能会报告分组,您需要知道要分组的项目的全部数量,而不需要这样做)必须显示整组数据,即报告服务)。


-1
投票

以下为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
© www.soinside.com 2019 - 2024. All rights reserved.