MySQL インスタンスでラーマン ベースボール データベースをいじっています。各年の本塁打数 (HR) を上回った選手を見つけたい。バッティング テーブルには、そのスキーマの次の (関連する部分) があります。
+-----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+-------+
| playerID | varchar(9) | NO | PRI | | |
| yearID | smallint(4) unsigned | NO | PRI | 0 | |
| HR | smallint(3) unsigned | YES | | NULL | |
+-----------+----------------------+------+-----+---------+-------+
毎年、すべてのプレーヤーがエントリを持っています (1871 年にさかのぼると、年間数百から 12,000 の間)。1 年間の上位 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 を見つけることに興味があります。私はこのような解決策を見つけ、カテゴリからトップを選択する方法を説明し、それを私の問題に適用しようとしましたが、返されないクエリになってしまいました:
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;
どこで間違ったのですか?