簡體   English   中英

SELECT 基於 DISTINCT 列的 GROUPBY 定義的值 SQL

[英]SELECT defined value based on GROUPBY of DISTINCT columns SQL

我有一個名為darts的表格,如下所示:

CREATE TABLE "darts" (
    "player"    TEXT,
    "opponent"  TEXT,
    "date"  TEXT,
    "competition"   TEXT,
    "round" TEXT,
    "sets"  REAL,
    "sets won"  REAL,
    "sets lost" REAL,
    "legs"  INTEGER,
    "legs won"  INTEGER,
    "legs lost" INTEGER,
    "opponent score"    INTEGER,
    "score_begin_of_turn"   INTEGER,
    "score_after_first_dart"    INTEGER,
    "score_after_second_dart"   TEXT,
    "score_after_third_dart"    TEXT
);

db 的每一行代表一個回合的玩家和相應的回合得分。 兩位玩家都以 0 局和 0 局獲勝,得分為 501 開始。雖然數據代表比賽的時間序列,但我想檢索每場比賽的“摘要”。 在howie的回答的幫助下,我寫了以下查詢

player = 'michael van gerwen' 
opponent = 'gerwyn price'

query = f""" WITH DEDUPE AS (
             SELECT *, ROW_NUMBER() OVER (PARTITION BY player, opponent, date, competition, round   
             ORDER BY player, opponent, date, competition, round) AS OCCURENCE
             FROM darts)

             SELECT *
             WHERE OCCURENCE = 1 
             AND player LIKE '{player}' 
             AND opponent LIKE '{opponent}' """

這個查詢產生兩個玩家之間每個日期、錦標賽和回合的所有唯一匹配。 output 如下所示:

                player      opponent  ... OCCURENCE
0   Michael van Gerwen  Gerwyn Price  ...  1
1   Michael van Gerwen  Gerwyn Price  ...  1
2   Michael van Gerwen  Gerwyn Price  ...  1
3   Michael van Gerwen  Gerwyn Price  ...  1
4   Michael van Gerwen  Gerwyn Price  ...  1
5   Michael van Gerwen  Gerwyn Price  ...  1
etc

但是,我也想確定最終得分。 這可以通過使用列中的值來找到legs wonlegs lost 我知道最后的分數等於

MAX(legs won) and MAX(legs lost)

但是,以上需要再次按playeropponentdatecompetitionround分組。 如何將其包含在我的查詢中? 請指教! 謝謝

所需的 output:

                player      opponent  ...  legs_player legs_opponent
0   Michael van Gerwen  Gerwyn Price  ...   7  5
1   Michael van Gerwen  Gerwyn Price  ...   4  3
2   Michael van Gerwen  Gerwyn Price  ...   2  7
3   Michael van Gerwen  Gerwyn Price  ...   5  6
4   Michael van Gerwen  Gerwyn Price  ...   4  0
5   Michael van Gerwen  Gerwyn Price  ...   0  4
etc

沒有樣本數據無法確定,但您似乎想要匯總。

SELECT player, opponent, date, competition, round
, MAX("legs won") AS max_legs_won
, MAX("legs lost") AS max_legs_lost
FROM darts
WHERE player LIKE '{player}' 
  AND opponent LIKE '{opponent}'
GROUP BY player, opponent, date, competition, round 
ORDER BY player, opponent, date, competition, round

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM