按价格分组数量

时间:2014-04-21 18:25:48

标签: mysql group-by group-concat

我有一个像这样的mysql表

 id |code|price|quantity
 1  |0001|10.00|1
 2  |0001|10.00|1
 3  |0001|15.00|3
 4  |0001|15.00|1
 5  |0002| 5.00|2
 6  |0002| 5.00|1

使用函数concatgroup_concat我得到了这个结果:

SELECT code, group_concat( CONCAT( quantity, 'x', FORMAT(price, 2 ))SEPARATOR '+' ) AS sales
FROM detalle_sales
GROUP BY code

code|sales
0001|1x10,00+1x10,00+3x15.00+1x15.00
0002|2x5.00+1x5.00

如何使用mysql按价格对数量进行分组?

code|sales
0001|2x10.00+4x15.00
0002|3x5.00

我是通过php完成的,但是当销售字段太长时,结果会被截断并给出不准确的值。

2 个答案:

答案 0 :(得分:0)

您需要一个子查询,它将具有相同价格的所有行组合在一起,然后是一个按GROUP_CONCAT执行code的主查询。

SELECT code, group_concat( CONCAT( quantity, 'x', FORMAT(price, 2 ))SEPARATOR '+' ) AS sales
FROM (
    SELECT code, price, SUM(quantity) as quantity
    FROM detalle_sales
    GROUP by code, price) AS subq
GROUP BY code

DEMO

答案 1 :(得分:0)

虽然我认为在数据库中创建这种格式并不是一个好主意,但这是如何做的:

SELECT code, group_concat( CONCAT( total, 'x', FORMAT(price, 2 ))SEPARATOR '+' ) AS sales
FROM (
     SELECT 
       code, price,
       SUM(quantity) AS total
     FROM detalle_sales
     GROUP BY code, price
) AS baseview
GROUP BY code