COUNT的SQL MAX(与其他cols一起)

时间:2011-02-20 17:06:49

标签: sql oracle10g

我有一个3关系的数据库提供,产品和&分类。我试图找到所提供产品的最大数量的月份的那一天。我需要返回类别名称(CN),日期,最大报价数量(OD)和报价数量(PC)。

我有这个问题:

SELECT CN, MAX(PC)
FROM
(
SELECT c.nombre as CN, EXTRACT(DAY FROM o.fecha) as OD, count(o.id_producto_ofertado) AS PC
FROM ofertas o join (categorias c JOIN productos p ON c.id = p.categoria) on o.id_producto_ofertado = p.id
GROUP BY  EXTRACT(DAY FROM o.fecha), c.nombre
)
GROUP BY CN

我认为它有效。但结果是与2个cols的关系:CN& MAX(PC)。如果我试着带上一天(OD),因为我需要它,使用:

SELECT CN, MAX(PC), OD
FROM
(
SELECT c.nombre as CN, EXTRACT(DAY FROM o.fecha) as OD, count(o.id_producto_ofertado) AS PC
FROM ofertas o join (categorias c JOIN productos p ON c.id = p.categoria) on o.id_producto_ofertado = p.id
GROUP BY  EXTRACT(DAY FROM o.fecha), c.nombre
)
GROUP BY CN, OD

然后它返回3个cols关系:CN,MAX(PC)& OD。但是重复了类别名称(CN),我认为因为我需要按OD分组以便提取当天。因此,返回在31天中每一天都包含一行。

我只需要为每个类别名称添加一行,返回类别名称,具有最多商品数量和最多商品数量的月份日期。

我现在被困住了,因为我不知道该怎么办。感谢

1 个答案:

答案 0 :(得分:2)

您可以使用row_number选择要约金额最高的行:

select  CustomerName
,       OrderDate
,       OfferCount
from    (
        select  CustomerName
        ,       OrderDate
        ,       OfferCount
        ,       row_number() over (partition by CustomerName
                                   order by OfferCount desc) as rn
        from    (
                select  c.nombre as CustomerName
                ,       EXTRACT(DAY FROM o.fecha) as OrderDate
                ,       count(o.id_producto_ofertado) as OfferCount
                FROM    ofertas o 
                join    categorias c 
                on      o.id_producto_ofertado = p.id
                join    productos p 
                on      c.id = p.categoria
                group by
                        c.nombre
                ,       EXTRACT(DAY FROM o.fecha)
                ) as GroupByDay
        ) as WithRowNumber
where   rn = 1

row_number的子查询可能没有必要,但我附近没有测试Oracle。