0

在 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 条记录。我想知道哪种方法更好?或者你可以建议我一个更快的查询

4

3 回答 3

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
于 2012-09-07T13:50:21.630 回答
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

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

于 2012-09-07T13:51:59.283 回答
1

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

您还有另一种选择:

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

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

于 2012-09-07T13:53:29.943 回答