一、需求:获取销售版本组合
颜色(属性名)+ (黑色,白色…) 属性值集合
@Data
public static class ItemSaleAttrsVo{
private Long attrId;
private String attrName;
//当前属性有多少种版本:黑色,白色,蓝色,这里使用字符串拼接的方式所以没有使用集合存储
private String attrValues;
}
二、Group by分组
为什么经常使用group by分组会报错呢?想要分组成功就必须保证查询结果的字段值保证一对一的关系
(1)分组前,每个字段的记录都是一 一对应的
(2)select 字段A ,字段B from XX gorup by 字段A
如果只对字段A进行group by 分组,如果是按种类分组,那么每个种类就只会展示一条记录,此时与其他未分组的字段会形成一对多的关系
那么数据库是无法展示结果的,并且报错
(3)怎么解决一对多的问题,将未分组的字段也转换成一条记录,这样就能保证一对一
可以将查询的结果分成两类,select 分组的字段,未参与分组的字段 from xxx
分组的字段使用group by,未参与分组的字段就必须使用聚合函数(group_concat,count ,avg,sum…)聚合为一条记录
三、查询结果
使用group_concat聚合函数可以将多记录合并
SELECT
b.attr_id,
b.attr_name,
GROUP_CONCAT(DISTINCT b.`attr_value`)
FROM `pms_sku_info` a LEFT JOIN `pms_sku_sale_attr_value` b ON a.sku_id = b.sku_id
WHERE a.spu_id = 28
GROUP BY b.attr_id,b.attr_name
distinct 去重后