2017-12-02 357 views
1

我下表得到了与查询select count(category), name from product natural join supplier group by name;SQL取得与列值的行等于最大值

count | nome  
-------+----------- 
    1 | CandyCorp 
    1 | Nike 
    1 | DrinksInc 
    7 | Mutante 
    1 | Colt 
    7 | Mazzetti 

现在我想获取仅相当于在数列中的最大值在与数列(在这种情况下7),得到:

count | nome  
-------+----------- 
    7 | Mutant 
    7 | Mazzetti 

编辑:我得到了它通过创建临时表工作:

create table auxtable as (select count(categoria),name from product natural join supplier group by name); 

select name from auxtable a1 join (select max(count) as countMax from auxtable) a2 on a1.count=a2.countMax; 

drop table auxtable; 

在单个查询中有没有办法解决这个问题?

回答

0

,你可以用它代替临时表CTE:

with auxtable as (select count(categoria),name from product natural join supplier group by name) 
select name from auxtable a1 
join (select max(count) as countMax from auxtable) a2 on a1.count=a2.countMax; 
0

可以使用rank() over (order by count(*) desc)通过数排名,然后就保持排名第一的项目:

select * from (
    select 
     rank() over (order by count(category) desc) rn, 
     name, count(category) 
    from product natural join supplier 
    group by name 
) t where rn = 1 

http://sqlfiddle.com/#!15/26b68/1

+0

谢谢你为你的答案,但是,因为这是一项任务,我不允许使用rank()。 –