Chr*_*ris 120 t-sql sql-server group-by count
如何通过查询计算组返回的记录数,
例如:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Run Code Online (Sandbox Code Playgroud)
给我,
1
1
2
Run Code Online (Sandbox Code Playgroud)
我需要计算上述记录,得到1 + 1 + 1 = 3.
gbn*_*gbn 154
您可以使用另一个COUNT上的OVER子句在一个查询中执行这两个操作
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 61
最简单的解决方案是使用派生表:
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用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
Run Code Online (Sandbox Code Playgroud)
car*_*rse 24
我知道现在已经很晚了,但没有人建议:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
Run Code Online (Sandbox Code Playgroud)
这至少在Oracle中有效 - 我目前没有其他数据库可以测试它,我对T-Sql和MySQL语法不太熟悉.
另外,我不完全确定在解析器中以这种方式执行它是否更有效,或者是否其他人的嵌套select语句的解决方案更好.但是从编码的角度来看,我觉得这个更优雅.
我试图在没有子查询的情况下实现相同的目标,并且能够获得如下所需的结果
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
Run Code Online (Sandbox Code Playgroud)
怎么样:
SELECT count(column_1)
FROM
(SELECT * FROM temptable
GROUP BY column_1, column_2, column_3, column_4) AS Records
Run Code Online (Sandbox Code Playgroud)
小智 5
CTE 为我工作:
with cte as (
select 1 col1
from temptable
group by column_1
)
select COUNT(col1)
from cte;
Run Code Online (Sandbox Code Playgroud)