当前位置:网站首页>问题记录与思考

问题记录与思考

2022-06-25 21:57:00 newProxyInstance

前言:日常的问题记录和思考。

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 #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'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

在这里插入图片描述

原网站

版权声明
本文为[newProxyInstance]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_37151886/article/details/125425095