使用列meno在查询中仅显示最大值 - SQL

时间:2017-04-23 20:46:46

标签: sql oracle

如标题中所述,我想只显示具有最大数字的行,对于这种情况,它是4号并且没有更少。

select divak.MENO,count(divak.MENO)
    from sledovanost
    natural join tv_stanice
    natural join divak
    group by divak.meno
    order by count(divak.MENO)desc;

My query

2 个答案:

答案 0 :(得分:0)

不要使用natural join。它使用列的名称来匹配表,并且不会在查询中显示名称。这是一个等待发生的错误。使用USINGON

在Oracle中,您通常会使用row_number()rank()执行此操作,具体取决于您是否需要重复项:

with t as (<your query here but name the second column>)
select t.*
from (select t.*, rank() over (order by cnt desc) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

您可以通过having - 子句实现此目的,在该子句中,您将每个MENO计数与最大MENO计数(由子查询检索)进行比较:

select divak.MENO,count(divak.MENO)
    from sledovanost
    natural join tv_stanice
    natural join divak
    group by divak.meno
    having count(divak.MENO) = (
      select (max(count(divak.MENO))
      from sledovanost
      natural join tv_stanice
      natural join divak
      group by divak.meno)

BTW:我将查询更改为join .. ON ..语法;连接同名命名属性的表的natural join在数据库架构发生变化时会带来“意外连接”的危险。