0

SQLselectステートメントのフィールドとしてカウントを取得するための最良の方法

私は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 プロファイラーを使用して、読み取りとリソースの消費量が最も少なく、最速の結果を生成するオプションを確認することをお勧めします。

別の選択肢もあります。

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 に答える