如何 select 具有最低值的行 - oracle
How to select the row with the lowest value- oracle
我有一个 table 用于保存作者和歌曲以及其他列。同一首歌可以出现多次,而且显然总是出自同一个作者。我想 select 歌曲最少的作者,包括重复的歌曲,也就是听得最少的作者。
最后的 table 应该只显示一个作者姓名。
显然,第一步是找出每位作者的数量。这可以通过基本聚合查询来完成。然后,如果您按计数排序并且您可以 select 第一行,这将解决您的问题。一种方法是在外部查询中使用 ROWNUM。这是一种非常基本的方法,非常有效,并且适用于所有版本的 Oracle(它不使用任何高级功能)。
select author
from (
select author
from your_table
group by author
order by count(*)
)
where rownum = 1
;
请注意,在子查询中我们不需要 select
计数(因为我们在输出中不需要它)。我们仍然可以在子查询的 order by
中使用它,这就是我们需要它的全部。
这里唯一棘手的部分是记住您需要对子查询中的行进行排序,然后在外部查询中应用 ROWNUM 过滤器。这是因为 ORDER BY 是在任何查询中处理的最后一件事 - 它在 ROWNUM 分配给输出中的行之后出现。因此,将 WHERE 子句移动到子查询中(并在单个查询中执行所有操作,而不是子查询和外部查询)不起作用 .
您可以使用如下解析函数:
Select * from
(Select t.*,
Row_number() over (partition by song order by cnt_author) as rn
From
(Select t.*,
Count(*) over (partition by author) as cnt_author
From your_table t) t ) t
Where rn = 1
我有一个 table 用于保存作者和歌曲以及其他列。同一首歌可以出现多次,而且显然总是出自同一个作者。我想 select 歌曲最少的作者,包括重复的歌曲,也就是听得最少的作者。 最后的 table 应该只显示一个作者姓名。
显然,第一步是找出每位作者的数量。这可以通过基本聚合查询来完成。然后,如果您按计数排序并且您可以 select 第一行,这将解决您的问题。一种方法是在外部查询中使用 ROWNUM。这是一种非常基本的方法,非常有效,并且适用于所有版本的 Oracle(它不使用任何高级功能)。
select author
from (
select author
from your_table
group by author
order by count(*)
)
where rownum = 1
;
请注意,在子查询中我们不需要 select
计数(因为我们在输出中不需要它)。我们仍然可以在子查询的 order by
中使用它,这就是我们需要它的全部。
这里唯一棘手的部分是记住您需要对子查询中的行进行排序,然后在外部查询中应用 ROWNUM 过滤器。这是因为 ORDER BY 是在任何查询中处理的最后一件事 - 它在 ROWNUM 分配给输出中的行之后出现。因此,将 WHERE 子句移动到子查询中(并在单个查询中执行所有操作,而不是子查询和外部查询)不起作用 .
您可以使用如下解析函数:
Select * from
(Select t.*,
Row_number() over (partition by song order by cnt_author) as rn
From
(Select t.*,
Count(*) over (partition by author) as cnt_author
From your_table t) t ) t
Where rn = 1