前言:日常的问题记录和思考。
Mysql Group by 语句
学习group by首先要知道 聚合函数是什么? 有哪些聚合函数?
mysql8.0 聚合函数篇
最常见的用法,查询每种商品的最低规格。
SELECT
goods_id,
min( goods_price )
FROM
tb_sku_info
GROUP BY
goods_id
但是我们可能需要其他的字段比如id或者name等等,查询非聚合列的时候可能会报错,例如下面的语句。
SELECT
id,
goods_id,
min( goods_price )
FROM
tb_sku_info
GROUP BY
goods_id
查询 sql_mode 语句
select @@sql_mode
set @@sql_mode = ONLY_FULL_GROUP_BY
select * from config_info group by group_id
1055 - Expression
'nacos_config.config_info.id' which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
去除sql_mode中ONLY_FULL_GROUP_BY这一规范是不正确的,不注意的话会带来其他的问题。
最显而易见的是 错行的 问题 。
SELECT
id,
specifications,
goods_id,
min( goods_price )
FROM
tb_sku_info
GROUP BY
goods_id
查询结果如图所示
查询总表后可以看到红框内的价格是商品最低的价格。
正确的写法,通过一个链接查询,用 最低价格跟 id 两个 字段来唯一匹配主表中的行记录即可。
SELECT
*
FROM
tb_sku_info AS t1
INNER JOIN ( SELECT goods_id, min( goods_price ) AS mixPrice FROM tb_sku_info GROUP BY goods_id ) AS t2 ON t1.goods_id = t2.goods_id
AND t1.goods_price = t2.mixPrice
|