我试图用最常用的ram配置查找每个模型。
表:
PC (code, model, speed, ram, hd, cd, price)
到目前为止,我能够列出每个ram配置的每个模型以及ram配置的使用次数。
select model, ram, max(config)
from (select model,ram,count(ram) as config
from pc
group by model, ram)
group by model, ram
输出:
MODEL RAM MAX(CONFIG)
------- ---- -----------
1232 64 2
1232 32 2
1233 128 3
1121 128 3
1233 64 1
1260 32 1
当我尝试使用最常用的ram列出模型时,我遇到了问题。
select model, ram
from (select model, ram, count(ram) as config
from pc
group by model, ram)
group by model
having config = max(config);
Error : ORA-00979: not a GROUP BY expression
答案 0 :(得分:0)
with x as
(select model,ram,count(ram) as config
from pc
group by model,ram)
, y as
(select model, max(config) as mxconfig from x group by model)
select x.model, x.ram --choose max(x.ram) or min(x.ram) in case of a tie and group by x.model
from x join y on x.model = y.model and x.config = y.mxconfig
此解决方案使用cte
来实现您的需求。如果您需要获得max
或min
ram,那么您需要在模型上有一个group by
。
答案 1 :(得分:0)
我认为你在寻找的是:
SELECT model,ram FROM (SELECT model,ram,count(ram) AS config
FROM pc
GROUP BY model,ram)
WHERE config=max(config)
记录应该已经按子查询分组
答案 2 :(得分:0)
一种方法是使用窗口函数:
select model, ram
from (select model, ram,
row_number() over (partition by model order by count(*) desc) as seqnum
from pc
group by model, ram
) mr
where seqnum = 1;