簡體   English   中英

每支球隊每周只獲得一個“足球對決”結果

[英]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;

在 DB Fiddle 上查看

暫無
暫無

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

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