我的表名是' 产品'其中包含以下列。
1. id
2. name
3. description
4. Price
在运行以下SQL查询时,这不会给我一个错误。
select name, sum(Price) from product group by Description;
在PostgreSQL上运行此查询时它给了我错误。
根据' group by' select子句中的子句列名称应该是条件的一部分。
因此,根据上面的说法,SQL查询名称应该是条件的一部分。
答案 0 :(得分:3)
在MySQL中,此行为可通过ONLY_FULL_GROUP_BY sql模式设置进行配置:
拒绝查询,其中选择列表,HAVING条件或ORDER BY列表引用既未在GROUP BY子句中命名也未在功能上依赖于(由GROUP BY列唯一确定)的非聚合列。
从MySQL 5.7.5开始,默认的SQL模式包括ONLY_FULL_GROUP_BY。 (在5.7.5之前,MySQL没有检测到功能依赖性和 默认情况下不启用ONLY_FULL_GROUP_BY。有关的描述 5.7.5之前的行为,参见MySQL 5.6参考手册。)
在你的MySQL ONLY_FULL_GROUP_BY中,sql模式显然没有设置。如果您希望MySQL拒绝该查询,则需要启用此行为。实际上,我鼓励大家确保启用这个sql模式 - 除非你真的知道你在做什么。
答案 1 :(得分:0)
你应该写这样的查询
您应该在选择列名称中仅按列名称和聚合函数编写组。
select Description, sum(Price) from product group by Description;
如果你想获得名字,你应该写这样的查询
您应该在分组中添加名称。
select name, sum(Price) from product group by name,Description;
如果您只想按描述分组,那么您可以像这样编写查询。
select max(name), sum(Price) from product group by Description;
如果名称相同,您可以使用min
或max
功能获取名称,或只需添加