[英]Getting only one result for a “football matchup” per team per week
我正在整理一個新項目,我需要做的一件事是獲得假足球(美國)比賽的結果。 我在 php 和 mysql 中執行此操作,使用 CodeIgniter 作為我的框架。 我的dbfiddle如下:
https://www.db-fiddle.com/f/5Q7QezddpNEGabaia2w5FQ/0
現在,如您所見,每支球隊都有一個 home_team_id 和 away_team_id 條目。 我想做的是有一個查詢,每個團隊只獲得一個結果(無論他們是在家還是在客場)。 如果不需要,我寧願不以編程方式處理這些數據。
結果應該類似於以下內容:
SELECT week, home_team_id, away_team_id,
my_score, their_score,
a.team_name as home_team, b.team_name as away_team
FROM nfl_user_matchups nm
LEFT JOIN user_teams a ON nm.home_team_id = a.user_teams_id
LEFT JOIN user_teams b ON nm.away_team_id = b.user_teams_id
WHERE week = 1
預期的最終數據將是這樣的(my_score 將是 home_team_id 得分,他們的_score 將是 away_team_id 得分):
+------+--------------+--------------+----------+-------------+
| week | home_team_id | away_team_id | my_score | their_score |
+------+--------------+--------------+----------+-------------+
| 1 | 3 | 9 | 112 | 144 |
+------+--------------+--------------+----------+-------------+
| 1 | 7 | 2 | 85 | 96 |
+------+--------------+--------------+----------+-------------+
| 1 | 1 | 6 | 111 | 114 |
+------+--------------+--------------+----------+-------------+
| 1 | 4 | 5 | 99 | 125 |
+------+--------------+--------------+----------+-------------+
| 1 | 8 | 10 | 140 | 122 |
+------+--------------+--------------+----------+-------------+
您的問題陳述基本上意味着一對團隊競爭,即。 , (1,2)
將被視為與(2,1)
相同。 處理此類要求的一種方法是確保對於這兩個團隊之間的任何比賽,我們確保它們的順序相同。 所以,基本上我們從兩個團隊中得到Least()
團隊 id 值,並且總是把它放在第一個索引中; 並且Greatest()
值始終位於第二個(最后一個)索引處。 值得注意的是Greatest()
與Max()
不同。 Max()
function 計算列的最大值; 而Greatest()
通常用於比較一行中的值。
現在,我們可以簡單地在這對上進行GROUP BY
並根據需要計算聚合。 在確定主場/客場得分時,您將需要使用CASE.. WHEN
表達式來確定特定行的主場 ID 最少還是客場 ID:
SELECT
week,
LEAST(home_team_id, away_team_id) AS home_id,
GREATEST(home_team_id, away_team_id) AS away_id,
MAX(CASE
WHEN LEAST(home_team_id, away_team_id) = home_team_id
THEN my_score
ELSE their_score
END) AS home_score,
MAX(CASE
WHEN GREATEST(home_team_id, away_team_id) = away_team_id
THEN their_score
ELSE my_score
END) AS away_score
FROM nfl_user_matchups
WHERE week = 1
GROUP BY
week,
home_id,
away_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.