mysql group_concat 分组,多字段统一排序及输出数据到java

本文不涉及mysql的配置,bean的创建和使用,数据库连接等教程,仅介绍group_concat输出到java
假设我们有如下数据
这里写图片描述
目标:输出goodsId为1002,已颜色分组的数据。

首先编辑一下sql语句

String sql ="SELECT serialNumber,goodsId,fatherGoodsId,"
				+ "GROUP_CONCAT(goodsCode) goodsCode,color,GROUP_CONCAT(CONVERT(size,char)) size,GROUP_CONCAT(CONVERT(stock,char)) stock,"
				+ "GROUP_CONCAT(CONVERT(price,char)) price,FROM goods_tb WHERE goodsId=1002 group by color";

然后假设有个bean

public class GoodsBean {
//如果数据库里的字段类型为bigint。要对应到java的BigInteger,字段需要设置无符号。如果是有符号,对应java使用 long类型去接收。
	private BigInteger serialNumber;
	private String color;
    private int goodsId;
    private int fatherGoodsId;
    private String goodsCode;
    private String size;
    private String stock;
    private String price;//因为分组返回的是集合结果,是字符串,不是单个的数据,所以集合用String接收
    //set和get这里不写了。自己写
    }

重点在于GROUP_CONCAT(CONVERT(size,char)) size类似如此的语句。
如果sql语句中只有GROUP_CONCAT(CONVERT(size,char)) 这样的。没有size。那么bean接收不到数据,
以String size变量为例:
当GROUP_CONCAT(CONVERT(size,char)) 这样的语句在命令界面中输出显示为:
这里写图片描述
这样的结果集,上图显示的GROUP_CONCAT(CONVERT(size,char)) ,用bean接收为空对象。也就是获取不到数据。网上说返回的是Blob类型,本人没试过,不清楚。

正确的语句GROUP_CONCAT(CONVERT(size,char)) size输出结果为
这里写图片描述

GROUP_CONCAT(CONVERT(size,char)) size 语句只是保证了输出数据的正确性。
真正分组的语句是group by color
如果没有group by color。命令界面显示的结果 只有一个颜色的记录。
这里写图片描述
从上图看出,size字段输出并不是我们想要的。它包含了另一个颜色的size数据。

我们知道了如何输出可以在java获取到的语句。就可以用bean接收了。
假设有个函数 searchSql 形参为String sql。返回类型为list。

public List<GoodsBean> searchSql (String sql){
	List<GoodsBean> mGoodsBean;
    //连接数据库,查询
	//对应到bean代码
	return mGoodsBean;
}

那么我们就可以这么写

List<GoodsBean> goodsBean = new ArrayList<GoodsBean>();
goodsBean = (List<GoodsBean>) searchSql(sql);

顺便提一下。
如果想要所有组合字段输出结果,都是按照一种排序方式。
比如说都是按照ORDER BY size DESC.,按size字段降序排序
那么你要在 sql语句中出现group_concat 的地方都加上ORDER BY size DESC
GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size GROUP_CONCAT(CONVERT(stock,char) ORDER BY size DESC) stock

若只设置GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size ,其他group_concat的地方不设置。那么设置的字段会排序,其他字段不会排序。

关于如何详细使用group_concat ,自行度娘。不再赘述。
本文为会心烦博客原创,转载注明处出!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值