0

我试图用最常用的 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
4

3 回答 3

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实现您所需要的。如果您需要在配置平局时获得其中一个maxminram,您应该group by在模型上再有一个。

于 2015-08-21T21:18:34.773 回答
0

我认为您正在寻找的是:

SELECT model,ram FROM (SELECT model,ram,count(ram) AS config
FROM pc 
GROUP BY model,ram)
WHERE config=max(config)

记录应该已经按您的子查询分组

于 2015-08-21T21:19:51.987 回答
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;
于 2015-08-21T21:23:26.437 回答