mysql group by子句添加非group by列

kkih6yb8  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(383)

我在mysql中有一个表,我想做一些分组操作。这是我的table

预期结果应为按箱号分组的价格总和,但产品id应为主要产品。所以结果应该是这样的

我可以做到以下几点

SELECT bag_no, sum(price) AS total_price 
FROM myTable
GROUP BY bag_no

但这将不允许我在表中添加我也想要的产品标识。我们怎么做?

sg3maiej

sg3maiej1#

一种规范的方法是连接到一个子查询,该子查询查找和:

SELECT
    t1.bag_no,
    t1.product_id,
    t2.total_price
FROM myTable t1
INNER JOIN
(
    SELECT bag_no, SUM(price) AS total_price
    FROM myTable
    GROUP BY bag_no
) t2
    ON t1.bag_no = t2.bag_no
WHERE
    t1.mainproduct = 'Y';

通过mysql 8+,支持解析函数,我们可以稍微简化一下上面的查询:

WITH cte AS (
    SELECT
        t1.bag_no,
        t1.product_id,
        SUM(price) OVER (PARTITION BY t1.bag_no) total_price,
        t1.mainproduct
    FROM myTable t1
)

SELECT bag_no, product_id, total_price
FROM cte
WHERE mainproduct = 'Y';

相关问题