我有 3 個我認為相關的表,盡管我的猜測是您可能需要使用 3 個表中的 2 個。所以這里的事情是我想找到所有 FPS 游戲的總游戲時間,這是一種電子游戲型別 第一個表是電子游戲,我認為它與解決這個問題無關,但無論如何我都會用一些樣本寫下來資料,以便您更好地了解
| 視頻游戲ID (PK) | 標題 | 發行年份 |
|---|---|---|
| 114 | 反恐精英 | 2012 |
| 115 | 星際爭霸 | 2010 |
| 116 | 使命召喚 | 2008年 |
第二張桌子是workson。這個表格顯示了在游戲上作業的 developerid 以及包含解決這個問題的關鍵的流派屬性
| 視頻游戲ID (FK) | 開發人員 (FK) | 型別 |
|---|---|---|
| 114 | 23567 | FPS |
| 114 | 23568 | FPS |
| 114 | 23569 | FPS |
| 115 | 23443 | 即時戰略 |
| 116 | 23667 | FPS |
第三張桌子是游戲時間
| 視頻游戲ID (FK) | 游戲時間(小時) |
|---|---|
| 114 | 25,000,000 |
| 115 | 980,456 |
| 116 | 27,000,000 |
預期結果應該是 5200 萬小時,因為資料集中存在的所有 FPS 游戲的游戲時間總和是 5200 萬小時
這是我對代碼的嘗試:
SELECT p.videogameid, w.genre,SUM(p.playtime)
FROM workson AS w, playtimes AS p
WHERE p.videogameid = w.videogameid
AND genre = 'FPS';
但是,我得到了錯誤的結果,我只獲得了一個 fps 游戲的播放時間,而不是資料集中存在的每個 fps 游戲。我錯過了什么嗎?
uj5u.com熱心網友回復:
不確定如何在沒有 groupby 的情況下運行查詢。
首先只在選擇中保留流派而不是聚合列,并且相同的非聚合列應該在 GROUP BY 中。使用 JOIN 而不是 equi-join,但這是一個偏好。
查詢應該看起來像這樣。
SELECT w.genre,SUM(p.playtime)
FROM workson AS w
JOIN playtimes AS p
on p.videogameid = w.videogameid
WHERE w.genre = 'FPS'
GROUP BY w.genre;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/438318.html
