1

SQL の Min 関数のヘルプが必要

以下に示すようなテーブルがあります。

+------------+-------+-------+
| | 日付_ | 名前 | スコア |
+------------+-------+-------+
| | 2012/07/05 | ジャック | ジャック | 1 |
| | 2012/07/05 | ジョーンズ | 1 |
| | 2012/07/06 | ジル | 2 |
| | 2012/07/06 | ジェームズ | 3 |
| | 2012/07/07 | ヒューゴ | 1 |
| | 2012/07/07 | ジャック | ジャック | 1 |
| | 2012/07/07 | ジム | 2 |
+------------+-------+-------+

以下のような出力を取得したいと思います

+------------+------+-------+
| | 日付_ | 名前 | スコア |
+------------+------+-------+
| | 2012/07/05 | ジャック | ジャック | 1 |
| | 2012/07/06 | ジル | 2 |
| | 2012/07/07 | ヒューゴ | 1 |
+------------+------+-------+

日付とスコア列だけで MIN() 関数を使用すると、日付ごとに最低のスコアが得られます。これが私が望むものです。同じ日付のスコアが同点の場合、どの行が返されるかは気にしません。出力に名前列も必要なときに問題が発生します。SQL のバリエーションをいくつか試しました (つまり、相関サブクエリを使用した分)、上記のような出力が得られませんでした。誰でも助けてください:)

クエリは次のとおりです

SELECT DISTINCT 
A.USername, A.Date_, A.Score 
FROM TestTable AS A 
INNER JOIN (SELECT Date_,MIN(Score) AS MinScore 
FROM TestTable 
GROUP BY Date_) AS B 
ON (A.Score = B.MinScore) AND (A.Date_ = B.Date_);
4

4 に答える 4

6

この解決策を使用してください:

SELECT a.date_, MIN(name) AS name, a.score
FROM tbl a
INNER JOIN
(
    SELECT date_, MIN(score) AS minscore
    FROM tbl
    GROUP BY date_
) b ON a.date_ = b.date_ AND a.score = b.minscore
GROUP BY a.date_, a.score

SQL フィドルのデモ

INNER JOINこれにより、メイン テーブルに結合するために使用するサブセレクトの日付ごとの最小スコアが取得されます。サブセレクトに参加すると、最小スコアを持つ名前を持つ日付のみが表示されます (同点が表示されます)。

日付ごとに名前が 1 つだけ必要なので、 と でグループ化しdatescoreいずれかの名前を選択します: MIN(name).

列を表示したい場合はname、集計関数 on を使用してon列と列nameを容易にする必要があります。そうしないと機能しません (その列でも同様に使用できます)。GROUP BYdatescoreMAX()

于 2012-07-07T18:42:31.030 に答える
1

GROUP BYRDBMSの機能について学んでください。

SELECT Date_,Name,MIN(Score)
FROM T
GROUP BY Name

これは、各名前と各日付が 1 回だけ出現することを前提としており、これは MySQL でのみ機能します。

他の RDBMS で機能させるには、MAX などの別のグループ関数を Date 列に適用する必要があります。最小。等

于 2012-07-07T18:08:22.523 に答える
0
SELECT T.Name, T.Date_, MIN(T.Score) as Score FROM T 
 GROUP BY T.Date_
于 2012-07-07T18:35:26.130 に答える