1. ホーム
  2. sql

[解決済み] 各GROUP BYグループの最初の行を選択しますか?

2022-03-15 12:36:22

質問

でグループ化された各行の先頭行を選択したい。 GROUP BY .

具体的には、もし私が purchases のようなテーブルがあります。

SELECT * FROM purchases;

私の出力

<テーブル イド 顧客 合計 1 ジョー 5 2 サリー 3 3 ジョー 2 4 サリー 1

をクエリしたいのですが id の最大購入額( total )がそれぞれ customer . このようなものです。

SELECT FIRST(id), customer, FIRST(total)
FROM  purchases
GROUP BY customer
ORDER BY total DESC;

期待される出力

<テーブル FIRST(id)の場合 顧客 FIRST(合計) 1 ジョー 5 2 サリー 3

解決方法

データベースで CTEおよびウィンドウ関数に対応 :

WITH summary AS (
    SELECT p.id, 
           p.customer, 
           p.total, 
           ROW_NUMBER() OVER(PARTITION BY p.customer 
                                 ORDER BY p.total DESC) AS rank
      FROM PURCHASES p)
 SELECT *
   FROM summary
 WHERE rank = 1

あらゆるデータベースに対応。

ただし、同点解消のためのロジックを追加する必要があります。

  SELECT MIN(x.id),  -- change to MAX if you want the highest
         x.customer, 
         x.total
    FROM PURCHASES x
    JOIN (SELECT p.customer,
                 MAX(total) AS max_total
            FROM PURCHASES p
        GROUP BY p.customer) y ON y.customer = x.customer
                              AND y.max_total = x.total
GROUP BY x.customer, x.total