在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条记录。 我想知道哪一种方法更好? 或者你可以建议我更快的查询
答案 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
测试所有这些,看看哪个最好。