0

クォーターバック統計の表があります。テーブルの各行は、1 つのゲームでの 1 つの QB のパフォーマンスを表します。各行の一意の ID は gameId と呼ばれ、プレイヤーの ID とゲームの日付で構成されます。

私がやりたいことは、select ステートメントを使用して、少なくとも 1 つの完了をスローしたテーブル内のすべての一意のクォーターバックのリストを生成することです。

私はこの声明でそれをやろうとしています:

SELECT * FROM swdata
WHERE gameComp > 0 AND gameId IN (
   SELECT MAX(gameId) FROM swdata GROUP BY playerId)
ORDER BY playerLastName

最初の節は gameComp > 0 で、2 番目の節はリストを一意のクォーターバックに絞り込むことです。

私がやりたいのは、最初の句が実行され、次に最初の句の結果に対して2番目の句が実行されることです。

しかし実際には、それらは同時に実行され、その結果、一部のプレーヤーが結果から除外されます。

だから、私はそれを間違って構成したことを知っています。誰でも私がそれを正しくするのを手伝ってくれますか?

4

1 に答える 1

2

一意の playerId が必要な場合は、次のように動作しませんか?

select distinct playerId
from swdata
where gamecomp > 0

複数の列が必要な場合は、次のようなクエリを使用して元のテーブルに結合します。

select s.*
from swdata s join
     (select playerId, max(gameId) as maxgameId
      from swdata
      group by playerId
     ) m
     on s.gameId = maxgameId

これは、 に関するあなたの質問への回答ですdistinct。個別は、select 句内のすべての個別の値を返します。したがって、以下は同等です。

select distinct playerID, playerLastName, playerFirstName
from swdata

select playerID, playerLastName, playerFirstName
from swdata
group by playerID, playerLastName, playerFirstName

これらはどちらも、データに表示される 3 つの列の一意の組み合わせをすべて返します。

于 2012-10-08T01:07:03.583 に答える