在SQL中需要有关Min Function的帮助
我有一张桌子如下图所示.
+------------+-------+-------+ | Date_ | Name | Score | +------------+-------+-------+ | 2012/07/05 | Jack | 1 | | 2012/07/05 | Jones | 1 | | 2012/07/06 | Jill | 2 | | 2012/07/06 | James | 3 | | 2012/07/07 | Hugo | 1 | | 2012/07/07 | Jack | 1 | | 2012/07/07 | Jim | 2 | +------------+-------+-------+
我想得到如下的输出
+------------+------+-------+ | Date_ | Name | Score | +------------+------+-------+ | 2012/07/05 | Jack | 1 | | 2012/07/06 | Jill | 2 | | 2012/07/07 | Hugo | 1 | +------------+------+-------+
当我使用MIN()函数只有日期和分数列时,我得到每个日期的最低分数,这就是我想要的.如果同一日期的得分存在平局,我不关心返回哪一行.当我还想在输出中输入名称列时,麻烦就开始了.我尝试了一些SQL的变体(即min与相关的子查询),但我没有运气得到如上所示的输出.任何人都可以帮助请:)
查询如下
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_);
Run Code Online (Sandbox Code Playgroud)
使用此解决方案:
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
Run Code Online (Sandbox Code Playgroud)
这将获得INNER JOINsubselect中每个日期的最低分数,我们用它来加入主表.一旦我们加入子选择,我们将只有名称具有最低分数的日期(显示关系).
由于我们每个日期只需要一个名称,因此我们将分组,date并score选择任何名称:MIN(name).
如果我们想要显示name列,我们必须使用聚合函数name来促进GROUP BYon date和scorecolumns,否则它将不起作用(我们也可以MAX()在该列上使用).
| 归档时间: |
|
| 查看次数: |
5246 次 |
| 最近记录: |