繁体   English   中英

分组多列

[英]Grouping Multiple Columns

我有以下查询:

SELECT od.product_id, od.product_name, od.product_quantity, od.product_price,
        o.id_address_delivery, a.id_country, a.id_state, s.name
FROM `ps_order_detail` od
LEFT JOIN ps_orders AS o ON od.`id_order` = o.`id_order`
LEFT JOIN `ps_address` AS a ON o.`id_address_delivery` = a.`id_address`
LEFT JOIN `ps_state` AS s ON a.id_state = s.id_state
ORDER BY o.`date_add` DESC
LIMIT 100;

它在哪里返回数据,如下所示:

product_id | 产品名称| product_qty | 产品价格| id_state

我想知道每个州的畅销书。 例如:

状态A:最畅销产品是产品A(销售数量为500)国家B:最畅销产品是产品C(销售数量为150)国家C:最畅销产品是产品A(销售量为100)

目前,我正在考虑在两列之间进行JOIN操作,但是第二次想到这需要类似“枢轴”的功能。

我知道如何获取每种产品的总销量

SELECT od.product_id, od.product_name, COUNT(od.product_id) AS 'total'
FROM `ps_order_detail` od
GROUP BY od.product_id
ORDER BY od.product_id DESC
LIMIT 100;

我也知道每个州的总销售量,但是我不确定如何将两者结合起来以达到我的需求。 我将不胜感激。 谢谢

您需要汇总查询的分组最大数量。 您可以这样做,例如:

select state, product_name, quantity
from (
  select id_state, state, product_id, product_name, quantity,
    @grprow := (case when @grp = id_state then @grprow + 1 else 1 end) as grprow,
    @grp := id_state
  from  ( 
    SELECT a.id_state, max(s.name) as state, od.product_id, 
         max(od.product_name) as product_name,
         sum(od.product_quantity) as quantity
    FROM `ps_order_detail` od
    LEFT JOIN ps_orders AS o ON od.`id_order` = o.`id_order`
    LEFT JOIN `ps_address` AS a ON o.`id_address_delivery` = a.`id_address`
    LEFT JOIN `ps_state` AS s ON a.id_state = s.id_state
    group by a.id_state, od.product_id
  ) grped,
  (select @grprow := 0, @grp := null) init
  order by id_state, quantity desc, product_id
) grpmax
where grprow = 1
order by id_state;

它将对每个州和产品的数量求和,然后对每个州的结果编号,然后取第一个。 如果两种产品在一个状态中的数量相同,则仅采用其中一种(具有较低的product_id)。 如果您想同时拥有两者,则可以调整@grprow的编号条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM