mysql - 对多列进行分组

标签 mysql prestashop prestashop-1.5

我有以下查询:

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;

它返回如下数据:

产品 ID |产品名称 |产品数量 |产品价格 | 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 的编号条件。

关于mysql - 对多列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39699145/

相关文章:

php - MySQL的threads_connected数量减慢了我的网站速度

MySQL 语法错误从 &lt;textarea&gt; 插入类型 VARCHAR(999) <<< 已解决使用不正确的表名

java - 将嵌套 sql 查询转换为 jpa/hibernate

PrestaShop-结账时无法让任何运营商出现

.htaccess - Seo 301 绝对 URL 重定向,Prestashop

mysql - Prestashop 导入 CSV 错误 - PRIMARY key 条目重复

MySQL连接两个表,其中另一个表中不存在记录

mysql - 将 Prestashop 1.5.6 网站从一个托管帐户移动到同一公司的另一个托管帐户现在会消耗超过 25% 的服务器资源吗?

mysql - SQL语句从多个表中提取记录

mysql - 计算日期间隔之间的行数