同じテーブルの行を複数の条件で比較する

パヴァン

これが表です

ID | Player | Position | Points
1  | Ryan   | QB       | 75
2  | Matt   | RB       | 80
3  | Mike   | WR       | 66
4  | Jay    | QB       | 71
6  | Alvin  | TE       | 73
7  | Adrian | TE       | 84
8  | Hill   | WR       | 71
9  | Charles| RB       | 53
10 | Bell   | WR       | 87
11 | Rob    | TE       | 49
12 | Alex   | RB       | 92
13 | Drew   | QB       | 84
14 | Mack   | TE       | 59
15 | Nick   | WR       | 33

ポイントが最も高いプレイヤーのポジションにいるすべてのプレイヤーと、他のポジションの上位2人のプレイヤーを報告したいと思います。この例では、「Alex」が最も高いポイントを持ち、「RB」です。そこで、「RB」の全選手と「QB」「TE」「WR」の上位2名を報告し、各グループでポイント順に並べていきたい。私はsqlite3を使用しています。私はPythonとsqlite3を使用してプログラムでこれを行うことができますが、これはsqlを使用してのみ行うことができるかどうか疑問に思いました

ID | Player | Position | Points
12 | Alex   | RB       | 92
2  | Matt   | RB       | 80
9  | Charles| RB       | 53
13 | Drew   | QB       | 84
1  | Ryan   | QB       | 75
10 | Bell   | WR       | 87
8  | Hill   | WR       | 71
7  | Adrian | TE       | 84
6  | Alvin  | TE       | 73

ご協力いただきありがとうございます

ゴードン・リノフ

これは「従来の」SQLiteでは注意が必要です。私はお勧めしunion allます:

with top1 as (
      select t.*
      from t
      order by points desc
      limit 1
     )
select t.*
from t
where t.position = (select t1.position from top1 t1)
union all
select t.*
from t
where t.position <> (select t1.position from top1 t1) and
      (select count(*)
       from t t2
       where t2.position = t.position and
             t2.points >= t.points
      ) <= 2;

これは、points値が一意であることを前提としています。SQLiteではネクタイを扱うのがはるかに困難です。

SQLiteバージョン3.25.0へのアップグレードを検討するか、別のデータベースを使用することをお勧めします。このようなクエリは、ISO / ANSI標準ウィンドウ関数を使用するとはるかに簡単になります。

ウィンドウ関数を使用すると、次のようになります。

select t.*
from (select t.*,
             row_number() over (partition by position order by points desc) as seqnum,
             first_value(position) over (order by points desc) as first_position
      from t
     ) t
where seqnum <= 2 or position = first_position

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mysqlの異なるWHERE条件で同じテーブルの複数のフィールドを更新する

分類Dev

SQL:同じテーブルで複数の値を取得する

分類Dev

複数のテーブルで同じ値を検索する

分類Dev

同じテーブルSQLの2つの行を比較する

分類Dev

同じテーブルの行の値を比較する

分類Dev

同じ列と同じテーブルの対応する行を比較する

分類Dev

同じテーブルの行を比較する

分類Dev

同じテーブルの行を比較する

分類Dev

同じテーブルの2行を比較する方法

分類Dev

SQL Server2005の同じテーブルの複数の行を比較します

分類Dev

SQL:同じテーブルの結果で複数の行を更新します

分類Dev

複数の行を比較して同じテーブルからデータを取得しますか?

分類Dev

TSQLは、同じ列の複数の行に基づいてテーブルを比較しますか?

分類Dev

OracleSQLの同じサブクエリで同じテーブルの複数の列を更新する方法

分類Dev

Oracleの同じテーブル内の複数の列を比較するSQLクエリ

分類Dev

同じSQLテーブルの2つの行のデータを比較する

分類Dev

mysqlテーブルの同じFKで複数の値を更新する

分類Dev

MySQLのJOINテーブルから同じテーブルから複数の行をプルする

分類Dev

同じ列の同じテーブルで異なる条件を使用してクエリを実行する

分類Dev

同じテーブルで複数のselectクエリを結合するPostgreSql

分類Dev

SQL同じテーブルで複数の結合を使用する方法

分類Dev

同じテーブルの2つの列間で複数の値を比較することに基づいてデータを選択します

分類Dev

複数の列で同じ条件の行をフィルタリングする

分類Dev

テーブルの同じ列の複数の行に単一のフォームから同じ名前の複数のデータを挿入する方法

分類Dev

複数の条件を満たす場合、同じテーブルの行からデータをコピーする

分類Dev

SQLCTEは同じテーブルの行を比較します

分類Dev

Oracle SQLは、同じテーブルの行を比較します

分類Dev

OracleSQL-同じテーブルの複数の行を独自の行に結合する

分類Dev

同じ行の複数の子テーブルからデータを返す

Related 関連記事

  1. 1

    mysqlの異なるWHERE条件で同じテーブルの複数のフィールドを更新する

  2. 2

    SQL:同じテーブルで複数の値を取得する

  3. 3

    複数のテーブルで同じ値を検索する

  4. 4

    同じテーブルSQLの2つの行を比較する

  5. 5

    同じテーブルの行の値を比較する

  6. 6

    同じ列と同じテーブルの対応する行を比較する

  7. 7

    同じテーブルの行を比較する

  8. 8

    同じテーブルの行を比較する

  9. 9

    同じテーブルの2行を比較する方法

  10. 10

    SQL Server2005の同じテーブルの複数の行を比較します

  11. 11

    SQL:同じテーブルの結果で複数の行を更新します

  12. 12

    複数の行を比較して同じテーブルからデータを取得しますか?

  13. 13

    TSQLは、同じ列の複数の行に基づいてテーブルを比較しますか?

  14. 14

    OracleSQLの同じサブクエリで同じテーブルの複数の列を更新する方法

  15. 15

    Oracleの同じテーブル内の複数の列を比較するSQLクエリ

  16. 16

    同じSQLテーブルの2つの行のデータを比較する

  17. 17

    mysqlテーブルの同じFKで複数の値を更新する

  18. 18

    MySQLのJOINテーブルから同じテーブルから複数の行をプルする

  19. 19

    同じ列の同じテーブルで異なる条件を使用してクエリを実行する

  20. 20

    同じテーブルで複数のselectクエリを結合するPostgreSql

  21. 21

    SQL同じテーブルで複数の結合を使用する方法

  22. 22

    同じテーブルの2つの列間で複数の値を比較することに基づいてデータを選択します

  23. 23

    複数の列で同じ条件の行をフィルタリングする

  24. 24

    テーブルの同じ列の複数の行に単一のフォームから同じ名前の複数のデータを挿入する方法

  25. 25

    複数の条件を満たす場合、同じテーブルの行からデータをコピーする

  26. 26

    SQLCTEは同じテーブルの行を比較します

  27. 27

    Oracle SQLは、同じテーブルの行を比較します

  28. 28

    OracleSQL-同じテーブルの複数の行を独自の行に結合する

  29. 29

    同じ行の複数の子テーブルからデータを返す

ホットタグ

アーカイブ