Mysql -group by 特别之处

xiaoxiao2021-02-28  73

1, 标准sql select 语句后面只能显示聚合函数和group by 后面的字段。

SELECT (vdfb.fund_name) fund_name, (IFNULL(SUM(vdfb.ssb_amt),0)) ssb_amt, (IFNULL(SUM(vdfb.pay_amt),0)) pay_amt FROM v_dw_fund_baseinfo vdfb GROUP BY vdfb.fund_code; 这sql是错误的;

2 ,mysql MySQL 扩展了 GROUP BY的用途,因此你可以使用SELECT 列表中不出现在 GROUP BY语句中的列或运算。这代表 “对该组的任何可能值 ”。你可以通过避免排序和对不必要项分组的办法得到它更好的性能

SELECT (vdfb.fund_name) fund_name, (IFNULL(SUM(vdfb.ssb_amt),0)) ssb_amt, (IFNULL(SUM(vdfb.pay_amt),0)) pay_amt FROM v_dw_fund_baseinfo vdfb GROUP BY vdfb.fund_code; 这种写法就是对的;(但会出现only_full_group_by错误)

3 any_value 的用法 防止only_full_group_by错误

从上图的报错,我们可以看到和sql_mode中的“only_full_group_by”有关。于是查询官方相关资料。

发现“only_full_group_by”SQL_MODE是默认开启的。关于它的详细介绍,由于本人英语一般,还请大家移步官网,看下详细的说明吧。具体地址如下: 官方参考资料: http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html //group by http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html // sql_mode

最后,直接上自己的结果: 【Mysql】5.7版本(group by)相关 从上图我们可以看到,group by后面的列名,可以通过select直接获取,而对于select中获取非group by的信息,则要通过any_value()函数。。

最后:如果查询语句不确定的话,建议大家可以在所有的select列名是,添加any_value()函数获取。

转载请注明原文地址: https://www.6miu.com/read-36216.html

最新回复(0)