SELECT g.id, s.name, SUM(g.gz) from sr s LEFT JOIN gz g on g.name
=s.name
group by g.name
;
这个sql有什么问题么
group by 的时候,无法确定你需要显示的ID,所以你要把g.id去掉
因为你group by了,所以,你select的时候,只能select你分组的列(比如g.name)或者聚合的列(比如sum(g,gz))
你如果需要g,id可以用max(g.id)或者把g.id也放在group by里面,因为你s.name和g.name一样,所以s.name修改为g,name
所以应该写
SELECT max(g.id), g.name, SUM(g.gz) from sr s LEFT JOIN gz g on g.name=s.name group by g.name
grounp by 问题
grounp by 只能配合聚合函数使用 所以 不能有 g.id, s.name,
SELECT g.id, s.name, SUM(g.gz) from sr s LEFT JOIN gz g on g.name=s.name group by g.id, s.name;
这个问题大了,你这个表结构是怎么样的,要实现怎样的功能。用的是mysql吧。正常表与表的关联采用的是主键,你这个设计是不是有问题
我建议你先去了解一下聚合函数,想想一下数据是怎么样变化的,你的代码显示你对聚合的概念根本就不是很懂,mysql数据库你这个语句有可能不会报错,但是结果肯定不是你想要的。你先弄清楚你想要什么样的数据,伪代码要清晰,然后再想办法实现。
group by 之后,select中只能出现 group by 的字段或者聚合函数
SELECT g.name,SUM(g.gz) from sr s LEFT JOIN gz g on g.name=s.name group by g.name;
先把name和sum查询出来,如果g.id, s.name 硬是要显示出来,请再写一个select连接上面的语句
语法问题。对于分组查询,默认情形下,被用于分组的列(出现在group by之后),必须包含或多于选取的列(出现在select之后);如果选取的
列是字符型,且不参与聚合运算,仅仅用于显示,考虑用max,min等函数包装,以便通过语法检查
建议你了解一下group by 的用法