我正在玩一個MySQL實例中的Lahman Baseball Database。我想找到每年擊敗本壘打(HR)的球員。擊球表有其模式的以下(相關部分):我如何找到每年排名前N的麪糊?
+-----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+-------+
| playerID | varchar(9) | NO | PRI | | |
| yearID | smallint(4) unsigned | NO | PRI | 0 | |
| HR | smallint(3) unsigned | YES | | NULL | |
+-----------+----------------------+------+-----+---------+-------+
每一年,每一個球員都有一個條目(數百每年12K之間,可以追溯到1871年)。獲得前N個打者爲一個單一的一年很簡單:
SELECT playerID,yearID,HR
FROM Batting
WHERE yearID=2009
ORDER BY HR DESC LIMIT 3;
+-----------+--------+------+
| playerID | yearID | HR |
+-----------+--------+------+
| pujolal01 | 2009 | 47 |
| fieldpr01 | 2009 | 46 |
| howarry01 | 2009 | 45 |
+-----------+--------+------+
但我感興趣的是從發現前3每年。我已經找到了解決方案,如this,描述如何選擇從類別上,我已經嘗試將其應用到我的問題,只有永遠不會返回查詢到結束:
SELECT
b.yearID, b.playerID, b.HR
FROM
Batting AS b
LEFT JOIN
Batting b2
ON
(b.yearID=b2.yearID AND b.HR <= b2.HR)
GROUP BY b.yearID HAVING COUNT(*) <= 3;
我在哪裏出錯了?
您需要先排序PED使用(降序)。 – MusiGenesis 2010-06-17 16:50:42