2013-05-22 29 views
1

我有兩個表與以下記錄:多行獲取與最大數量的SQL

客戶:

cid | cname | ccountry 
----------------------- 
    1 | John | Australia 
    2 | Mark | USA 
    3 | Liz | England 

訂單:

oid | cid | oquantity 
--------------------- 
    1 | 1 |  100 
    2 | 1 |  100 
    3 | 2 |  50 
    4 | 2 |  150 
    5 | 3 |  50 
    6 | 3 |  100 

我需要找出客戶端名稱( s)有最大數量的訂單。我運行以下查詢並獲得正確的結果。

select cname, ccountry 
    from Clients 
where cid in 
     (select cid 
      from Orders 
     group by cid 
      having sum(oquantity) = (select max(amount) from 
             (select sum(oquantity) amount 
              from Orders 
             group by cid)t1)) 

2行(S)返回

'約翰', '澳'

'馬克', 'USA'

但我只需要知道,是否可以通過更簡單的方式來完成。一旦總量還需要退貨,它就變得複雜了。

回答

0

我減少了您的2子查詢。

SELECT 
    clients.cid, 
    cname, 
    ccountry 
FROM Orders, 
    Clients 
WHERE orders.cid = clients.cid 
GROUP BY clients.cid 
HAVING SUM(orders.oquantity) = (SELECT 
            SUM(oquantity) AS amount 
           FROM Orders 
           GROUP BY cid 
           ORDER BY amount DESC 
           LIMIT 1) 
+0

工作正常。感謝堆。 –

0
SELECT c.cname, c.ccountry, SUM(oquantity) AS total_qtty 
FROM Clients c 
INNER JOIN Orders o ON (o.cid = c.cid) 
GROUP BY c.id 
ORDER BY total_qtty DESC 
LIMIT 2 
+0

爲什麼要限制爲2? –

+0

不需要,只有當你想限制你想要帶出的結果。 – medina

+0

但我想獲得與最大匹配的所有記錄。在這種情況下,LIMIT將不起作用。 –

0

嘗試:

select cname, ccountry, sum(oquantity) 
FROM Clients c 
INNER JOIN Orders o ON (o.cid = c.cid) 
where c.cid in 
(
    select cid from Orders group by cid 
    having sum(oquantity) = (
    select max(amount) from (
     select sum(oquantity) amount from Orders group by cid)t1)) 
GROUP BY c.cid 
+0

比我的更好:) –