MySQL group by对单字分组序和多字段分组的方法讲解

  

我这里创建了一个产品表,先看下里面的数据:

        mysql>select * from商品;   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +   | | id s_id | b_id | goods_name | goods_price | goods_desc |   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +   书| 1 | 1 | 5 | | | 22.35 |书   | 2 | 2 | 5 | | 32.25 | |球球   | 3 | 3 | 5 |空零| | 3.23 |   | 4 | 3 | 5 | macbook | 3.23 | |书   | 5 | 3 | 5 | listbook | 2.30 | |书   | 6 | 1 | 1 | nicebook | 9999.00 | nicebook |   | 7 | 2 | 3 | googlebook | 25.30 | |书   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - +      

<强> 1,根据s_id分组

        mysql>select *, group_concat (goods_name) goods_names group_concat (goods_desc) goods_descs group_concat (id) id, group_concat (goods_price) goods_prices s_id从商品组;   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   | | id s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs ids | | goods_prices |   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   书| 1 | 1 | 5 | | 22.35 | |书,nicebook |书,nicebook | 1 | 6 | 22.35, 9999.00   | 2 | 2 | 5 | | | 32.25 |球球,球googlebook |球,书| 2 | 7 | 32.25,25.30   零| | 3 | 3 | 5 | 3.23 |零| macbook, listbook |书,书| 3,4,5 | 3.23,3.23,2.30 |   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +      

这里使用了<代码> group_concat() 函数,主要目的是为了显示分组的详细信息

  

上面的根据单个字段分组很简单,把相同<代码> s_id>   

<强> 2,根据s_id, goods_desc字段分组

  

分析:这里查询分组时,会先根据s_id分组,然后对每个组里面的数据再根据goods_desc进行分组

        mysql>select *, group_concat (goods_name) goods_names group_concat (goods_desc) goods_descs group_concat (id) id, group_concat (goods_price) goods_prices商品group by s_id goods_desc;   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +   | | id s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs ids | | goods_prices |   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +   | 1 | 1 | 5 |书书书书| 22.35 | | | | 1 | 22.35 |   | 6 | 1 | 1 | nicebook | 9999.00 | nicebook | nicebook | nicebook | 6 | 9999.00 |   | 2 | 2 | 5 |球球球球| 32.25 | | | | 2 | 32.25 |   | 7 | 2 | 3 | googlebook | 25.30 | | googlebook 7 | 25.30 | | |书   零| | 3 | 3 | 5 | 3.23 |空零零| 3 | 3.23 | | |   | 4 | 3 | 5 | macbook | 3.23 | | macbook, listbook |书,书| 4 | 5 | 3.23,2.30   + - - - + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - +      

这里的goods_descs和上面的一比较就明白了

  

接下来还可以再根据goods_price分组

        mysql>select *, group_concat (goods_name) goods_names group_concat (goods_desc) goods_descs group_concat (id) id, group_concat (goods_price) goods_prices商品group by s_id goods_desc, goods_price;   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +   | | id s_id | b_id | goods_name | goods_price | goods_desc | goods_names | goods_descs ids | | goods_prices |   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +   | 1 | 1 | 5 |书书书书| 22.35 | | | | 1 | 22.35 |   | 6 | 1 | 1 | nicebook | 9999.00 | nicebook | nicebook | nicebook | 6 | 9999.00 |   | 2 | 2 | 5 |球球球球| 32.25 | | | | 2 | 32.25 |   | 7 | 2 | 3 | googlebook | 25.30 | | googlebook 7 | 25.30 | | |书   零| | 3 | 3 | 5 | 3.23 |空零零| 3 | 3.23 | | |   | 5 | 3 | 5 | listbook | 2.30 | | listbook书| | 5 | 2.30 |   | 4 | 3 | 5 | macbook | 3.23 | | macbook书| | 4 | 3.23 |   + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +

MySQL group by对单字分组序和多字段分组的方法讲解