Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表中查找多个最大值_Sql_Database_Oracle - Fatal编程技术网

Sql 从表中查找多个最大值

Sql 从表中查找多个最大值,sql,database,oracle,Sql,Database,Oracle,我读过类似问题的答案,但我找不到解决我特定问题的方法 我将用一个简单的例子来说明我的问题 我有一个名为“奖品”的表格,有两列:员工和奖品 “员工”列列出员工的ID,奖励显示该员工赢得的单个奖励。如果一名员工赢得了多个奖项,他们的ID将与每个唯一的奖项一起列在表格的多行中 该表如下所示: Employee AWARD 1 Best dressed 1 Most attractive 2 Biggest time waster 1

我读过类似问题的答案,但我找不到解决我特定问题的方法

我将用一个简单的例子来说明我的问题

我有一个名为“奖品”的表格,有两列:员工和奖品

“员工”列列出员工的ID,奖励显示该员工赢得的单个奖励。如果一名员工赢得了多个奖项,他们的ID将与每个唯一的奖项一起列在表格的多行中

该表如下所示:

Employee      AWARD
    1     Best dressed
    1     Most attractive
    2     Biggest time waster
    1     Most talkative
    3     Hardest worker
    4     Most shady
    3     Most positive
    3     Heaviest drinker
    2     Most facebook friends
使用此表,我将如何选择获奖最多的员工的ID

输出应为:

Employee
   1
   3
例如,这两名员工都获得了3项大奖

目前,下面的查询按降序输出员工ID以及他们赢得的奖励数量:

SELECT employee,COUNT(*) AS num_awards
FROM prizes
GROUP BY employee
ORDER BY num_awards DESC;
将输出:

employee  num_awards
  1       3
  3       3
  2       2
  4       1

如何更改查询以选择奖励最多的员工?

您可以使用
densite\u rank
获取计数最高的所有行

with cnts as (
SELECT employee, count(*) cnt
FROM prizes
GROUP BY employee)
, ranks as (select employee, cnt, dense_rank() over(order by cnt desc) rnk 
            from cnts)
select employee, cnt 
from ranks where rnk = 1

您可以使用
densite\u rank
获取计数最高的所有行

with cnts as (
SELECT employee, count(*) cnt
FROM prizes
GROUP BY employee)
, ranks as (select employee, cnt, dense_rank() over(order by cnt desc) rnk 
            from cnts)
select employee, cnt 
from ranks where rnk = 1

表达这一点的一个简单方法是使用
rank()
densed\u rank()


能够组合聚合函数和分析函数可以使这些查询更加简洁。

表达这一点的简单方法是使用
rank()
densed\u rank()


能够组合聚合函数和分析函数可以使这些查询更加简洁。

这非常有效,谢谢。假设我也可以从select语句中删除“COUNT(*)AS num_awards”(计数(*)作为num_awards),因为它并没有真正的用处,这是否正确?编辑:在我的实际查询中,我只需要获得最多奖项的员工ID,而不需要他们实际获得了多少奖项。@Shiftz。您可以将计数(*)作为num_奖励删除。另外,只需
选择employee
。这非常有效,谢谢。假设我也可以从select语句中删除“COUNT(*)AS num_awards”(计数(*)作为num_awards),因为它并没有真正的用处,这是否正确?编辑:在我的实际查询中,我只需要获得最多奖项的员工ID,而不需要他们实际获得了多少奖项。@Shiftz。您可以将计数(*)作为num_奖励删除。另外,只需
选择employee