1

次のレコードを持つ 2 つのテーブルがあります。

クライアント:

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

注文数が最大のクライアント名を見つける必要があります。次のクエリを実行すると、正しい結果が得られました。

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 行が返されました

「ジョン」、「オーストラリア」

「マーク」、「アメリカ」

しかし、もっと簡単な方法でそれができるかどうかを知る必要があります。合計数量も返却する必要があると煩雑になってきました。

4

3 に答える 3

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 )
于 2013-05-22T13:02:52.213 に答える
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
于 2013-05-22T11:28:45.737 に答える