![](/img/trans.png)
[英]SQL: Find all rows in a table for which all rows in another table that refer to the original row have a certain property
[英]SQL Calculation of Row on All Rows of another table
我正在計算棒球運動員的相似度得分。 我想做的是根據玩家ID選擇一行,然后對所有其他現有玩家進行計算。
這是一般概念:
與其他玩家ID相比,我編寫了適用於單個玩家ID的代碼:
SELECT p.player, pc.player,
1000 - (Abs((p.G-pc.G)/20) +
Abs((p.AB-pc.AB)/75) +
Abs((p.R-pc.R)/10) +
Abs((p.H-pc.H)/15) +
Abs((p.D-pc.D)/5) +
Abs((p.T-pc.T)/4) +
Abs((p.HR-pc.HR)/2) +
Abs((p.RBI-pc.RBI)/10) +
Abs((p.BB-pc.BB)/25) +
Abs((p.SO-pc.SO)/150) +
Abs((p.SB-pc.SB)/20) +
Abs((p.AVG-pc.AVG)*1000) +
Abs((p.SLG-pc.SLG)*2000)) AS SIMscore
FROM(SELECT CONCAT(m.nameFirst, ' ', m.nameLast) AS player,
Sum(b.G) AS G,
Sum(b.AB) AS AB,
Sum(b.R) AS R,
Sum(b.H) AS H,
Sum(b.2b) AS D,
Sum(b.3b) AS T,
Sum(b.HR) AS HR,
Sum(b.RBI) AS RBI,
Sum(b.BB) AS BB,
Sum(b.SO) AS SO, b.SB AS SB,
Sum(b.H)/Sum(b.AB) AS AVG,
(Sum(b.H)+Sum(b.2b)*2+Sum(b.3B)*3+Sum(b.HR)*4)/Sum(b.AB) AS SLG
FROM Batting b
JOIN Master m
ON b.playerID = m.playerID
WHERE b.playerID = 'griffke02') AS p,
(SELECT CONCAT(m.nameFirst, ' ', m.nameLast) AS player,
Sum(b.G) AS G,
Sum(b.AB) AS AB,
Sum(b.R) AS R,
Sum(b.H) AS H,
Sum(b.2b) AS D,
Sum(b.3b) AS T,
Sum(b.HR) AS HR,
Sum(b.RBI) AS RBI,
Sum(b.BB) AS BB,
Sum(b.SO) AS SO,
Sum(b.SB) AS SB,
Sum(b.H)/Sum(b.AB) AS AVG,
(Sum(b.H)+Sum(b.2b)*2+Sum(b.3B)*3+Sum(b.HR)*4)/Sum(b.AB) AS SLG
FROM Batting b
JOIN Master m
ON b.playerID = m.playerID
WHERE b.playerID = 'troutmi01') AS pc
但是,我需要將單個玩家WHERE b.playerID = 'troutmi01'
與所有其他玩家進行比較,而不僅僅是WHERE b.playerID = 'troutmi01'
SELECT CONCAT(m.nameFirst, ' ', m.nameLast) AS player,
Sum(b.G) AS G,
Sum(b.AB) AS AB,
Sum(b.R) AS R,
Sum(b.H) AS H,
Sum(b.2b) AS D,
Sum(b.3b) AS T,
Sum(b.HR) AS HR,
Sum(b.RBI) AS RBI,
Sum(b.BB) AS BB,
Sum(b.SO) AS SO,
Sum(b.SB) AS SB,
Sum(b.H)/Sum(b.AB) AS AVG,
(Sum(b.H)+Sum(b.2b)*2+Sum(b.3B)*3+Sum(b.HR)*4)/Sum(b.AB) AS SLG
FROM Batting b
JOIN Master m
ON b.playerID = m.playerID
有見識嗎?
SELECT CONCAT(m.nameFirst, ' ', m.nameLast) AS player,
Sum(b.G) AS G,
Sum(b.AB) AS AB,
Sum(b.R) AS R,
Sum(b.H) AS H,
Sum(b.2b) AS D,
Sum(b.3b) AS T,
Sum(b.HR) AS HR,
Sum(b.RBI) AS RBI,
Sum(b.BB) AS BB,
Sum(b.SO) AS SO,
Sum(b.SB) AS SB,
Sum(b.H)/Sum(b.AB) AS AVG,
(Sum(b.H)+Sum(b.2b)*2+Sum(b.3B)*3+Sum(b.HR)*4)/Sum(b.AB) AS SLG
FROM Batting b
JOIN Master m
ON b.playerID = m.playerID
GROUP BY CONCAT(m.nameFirst, ' ', m.nameLast)
通過...添加群組
至於為什么需要了解Mysql Group By Extensions
具體來說:“但是,這主要在以下情況下有用:每個未聚合的列中未在GROUP BY中命名的所有值對於每個組都是相同的。服務器可以從每個組中自由選擇任何值,因此,除非它們相同,否則這些值選擇是不確定的。”
在您的情況下,它們是不同的。 玩家的每條記錄都會有所不同,因此需要將其添加到分組依據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.