在Sql select语句中获取Count as字段的最佳方法

时间:2012-09-07 13:47:40

标签: sql sql-server sql-server-2008 tsql

在Sql select语句中将Count作为字段的最佳方法

我有2个表:人员和订单


 Id            Name            Age
 1            name1           1
 2            name2           2

订单


Id            Amount           PersonId
 1              30               1
2              40               2
3              30               2
4              40               2
5              30               1
6              40               2
7              30               1
8              40               2

我希望用户详细了解订单总数,所以为此我有2个解决方案:

 1. select p.Name,p.Age,(select count(1) form orders o where o.personId= p.Id as       cntVal 
    from Person p

 2. select p.Name,p.Age,cntVal 
    from Person p
    inner join (select personId,count(1) as cntVal from orders o group by PersonId) cnt
     on cnt.personId=p.Id

我们在Person中有大约200K条记录,在Order表中有15K条记录。  我想知道哪一种方法更好?  或者你可以建议我更快的查询

3 个答案:

答案 0 :(得分:2)

我错过了什么吗?

select  p.name, p.age, count(o.OrderId)
from    Person p join Orders o on p.PersonId = o.PersonId
group by p.name, p.age

答案 1 :(得分:1)

这是另一种选择 - 这将是我的第一选择。

select p.Name,p.Age, count(orderID)
from 
    Person p 
inner join 
    Orders o
        on p.Id = o.personId
group by p.id, p.Name, p.Age

如果您希望未下订单的人也计算在内,请将内部联接更改为左联接

答案 2 :(得分:1)

如果您唯一关心的是效率和速度,我建议您使用SQL事件探查器,看看哪个选项以最少的读取和资源消耗产生最快的结果。

您还有另一种选择:

Select  
   p.Name, 
   p.Age, 
   Count(*) as OrderCount
From  Person p 
   Join Orders o on p.PersonId = o.PersonId
Group By p.Name, p.Age

测试所有这些,看看哪个最好。