2012-01-12 6 views
1

私のSQLクエリ:サブクエリはこのクエリを書いていいですか?

select 
    *, 
    (select sum(Amount) as TotalAmount 
    from Payment 
    where Customer.Id = Payment.CustomerId) 
from Customer 

結果:

Id - CustomerName - CustomerPhoneNumber - TotalAmount 
1 - TestUser  - TestLastName  - 3000 
2 - TestUser2 - TestLastName2  - 2500 

は、これは私が期待通りに働いています。しかし、同じ結果を得るためのよりよい方法はありますか?

+2

何様々な? – MatBailie

答えて

1

それはMySQLの場合は、あなたがこれを行うことができます... SQLの他の品種に

SELECT 
    Customer.*, 
    SUM(Payment.Amount) AS TotalAmount 
FROM 
    Customer 
LEFT JOIN 
    Payment 
    ON Payment.CustomerId = Customer.Id 
GROUP BY 
    Customer.id 

、あなたは集計選択していないが、すべてのGROUP BYにする必要があります。

SELECT 
    Customer.Id, 
    Customer.Name, 
    Customer.PhoneNumber, 
  SUM(Payment.Amount) AS TotalAmount 
FROM 
  Customer 
LEFT JOIN 
  Payment 
    ON Payment.CustomerId = Customer.Id 
GROUP BY 
  Customer.Id, 
    Customer.Name, 
    Customer.PhoneNumber 
1

あなたはLEFT JOINGROUP BYでそれを書き換えることができます:SQLの

select 
a.*, sum(b.Amount) as TotalAmount  
from Customer a 
left join Payment on (a.Id = b.CustomerId) 
GROUP BY a.Id -- for mysql only, for other RDMS you have to list all Customer fields 

それとも

select 
a.*, b.TotalAmount  
from Customer a 
left join 
(SELECT CustomerId, SUM(Amount) as TotalAmount 
FROM Payment GROUP BY CustomerId)b ON (b.CustomerId = a.Id) 
関連する問題