【问题标题】:How to find MAX Count value for each group separately如何分别查找每个组的 MAX Count 值
【发布时间】:2016-11-14 17:27:30
【问题描述】:

这是我的查询

SELECT q2.item_code
     , q2.SELL_DELIVERY_AMOUNT
     , q2.count_amount
  FROM 
     ( SELECT i.item_code
            , s.SELL_DELIVERY_AMOUNT 
            , count(s.SELL_DELIVERY_AMOUNT) count_amount
         FROM sell_delivery_items s 
            , items i
        WHERE s.item_id = i.item_id
        GROUP 
           BY SELL_DELIVERY_AMOUNT
            , item_code
     ) q2
 order 
    by item_code
     , count_amount desc 

结果是

item_code   SELL_DELIVERY_AMOUNT     count_amount
0001        50                       2
0001        100                      1
0002        150                      3

我只需要显示每个 item_code 组的最高 count_amount 行。 我已经搜索了一些答案,但仍然不能适用于我的。

这就是我想要的结果

item_code   SELL_DELIVERY_AMOUNT     count_amount
0001        50                       2
0002        150                      3

我该怎么做?谢谢大家的回答。

【问题讨论】:

标签: mysql greatest-n-per-group


【解决方案1】:

我找到了解决方案。这是我的:

SELECT q3.item_code, q3.item_name, substring_index(q3.AMOUNT_LIST, ',' , 1) as most_amount_count, 
substring_index(q3.count_list,',',1) as count_time from

(SELECT q2.item_code, q2.item_name, GROUP_CONCAT(SELL_DELIVERY_AMOUNT ORDER BY q2.count_amount DESC) as AMOUNT_LIST, 
GROUP_CONCAT(q2.count_amount ORDER BY q2.count_amount desc) as count_list from

    (SELECT  i.item_code, i.ITEM_NAME, s.SELL_DELIVERY_AMOUNT , count(s.SELL_DELIVERY_AMOUNT) as count_amount
    FROM sell_delivery_items s , items i
    WHERE s.item_id = i.item_id
    GROUP BY SELL_DELIVERY_AMOUNT, item_code
    order by item_code, count_amount desc
    )  as q2

group by q2.item_code )as q3

【讨论】:

    【解决方案2】:

    这是未经测试的,因为我没有 MySQL - 但这样的东西应该可以工作:

     SELECT  q2.item_code, q2.SELL_DELIVERY_AMOUNT, q2.count_amount
     FROM 
    (SELECT  i.item_code, s.SELL_DELIVERY_AMOUNT , count(s.SELL_DELIVERY_AMOUNT)     as count_amount
    FROM sell_delivery_items s , items i,  @rownum := @rownum + 1 AS rank
     WHERE s.item_id = i.item_id
     GROUP BY SELL_DELIVERY_AMOUNT, item_code) as q2
     where rank = 1
    order by item_code, count_amount  desc 
    

    您需要向内部查询添加“排名”或“行号”功能,然后向外部查询添加过滤器以仅选择排名靠前的行。

    这是另一个在 MySQL 中排名的例子:Ranking by Group in MySQL

    【讨论】:

    【解决方案3】:

    这个呢?

    SELECT  q2.item_code, q2.SELL_DELIVERY_AMOUNT, max(q2.count_amount)
    FROM 
    (SELECT  i.item_code, s.SELL_DELIVERY_AMOUNT , count(s.SELL_DELIVERY_AMOUNT) as count_amount
    FROM sell_delivery_items s , items i
    WHERE s.item_id = i.item_id
    GROUP BY SELL_DELIVERY_AMOUNT, item_code) as q2
    group by q2.item_code
    order by count_amount  desc
    

    在这里order by item_code, count_amount desc,您按自然顺序订购item_code,a group by 订购的。

    【讨论】:

    • 我试过了,它只会显示第一组的第一行。
    • SELL_DELIVERY_AMOUNT 仍然显示错误的值,但其余的都是正确的。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2020-11-19
    • 2012-12-26
    • 2011-12-11
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    相关资源
    最近更新 更多