从结果查询中选择count(*)

But*_*ers 36 sql sql-server select

我需要你的帮助,这是我的SQL查询:

select count(SID) 
from Test 
where Date = '2012-12-10' 
group by SID
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

|2|
|3|
|4|
|3|
Run Code Online (Sandbox Code Playgroud)

现在我必须计算第一次查询的结果!

Expected result: 4 
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 60

您可以将查询包装在另一个中SELECT:

select count(*)
from
(
  select count(SID) tot  -- add alias
  from Test 
  where Date = '2012-12-10' 
  group by SID
) src;  -- add alias
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

为了使它工作,count(SID)需要一个列别名,并且您必须为子查询本身提供别名.

  • 任何人都可以解释为什么你需要别名?我没有它们就尝试了它并且它没有用,但是对于我来说并不是很明显你需要它们,因为在查询中你从不使用它们(在这种情况下是'tot'和'src'). (5认同)
  • @GarrettDisco 由于您使用的是子查询,因此子查询中的每一列都需要有一个名称,即别名。SQL Server 还需要子查询的别名。 (2认同)

dan*_*111 6

这会计算内部查询的行数:

select count(*) from (
    select count(SID) 
    from Test 
    where Date = '2012-12-10' 
    group by SID
) t
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,其效果与此相同:

select count(distinct SID) from Test where Date = '2012-12-10'
Run Code Online (Sandbox Code Playgroud)

  • @dan1111 在网上尝试 SQLFIDDLE ;)。 (3认同)