sqlalchemy group_by错误

问题描述 投票:0回答:2

以下作品

s = select([tsr.c.kod]).where(tsr.c.rr=='10').group_by(tsr.c.kod)

并且这不是:

s = select([tsr.c.kod, tsr.c.rr, any fields]).where(tsr.c.rr=='10').group_by(tsr.c.kod) 

为什么?

thx。

group-by sqlalchemy
2个回答
1
投票

这不起作用,因为这样查询无效。

根据SQL标准,每列都必须位于group_by中或需要一个汇总(即max()min(),无论如何)。大多数数据库始终遵循此要求,但也有一些例外。

MySQL在这方面一直是奇怪的,在MySQL中,此行为取决于ONLY_FULL_GROUP_BY设置:https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

我个人建议将sql_mode设置设置为ANSI。这样,您就可以很大程度上符合SQL标准,如果您将来需要使用(或迁移到)符合标准的数据库(例如PostgreSQL),这将对您有所帮助。


0
投票

您尝试执行的操作在mysql中某种程度上有效,但在标准sql,postgresql和常识中无效。当按“ kod”对行进行分组时,组中的每一行都具有相同的“ kod”值,但“ rr”的值不同。使用聚合函数,您可以在此列中为每个组获取值的某些方面,例如

按kod从表组中选择kod,max(rr)

将为您提供'kod'的列表以及每个组中'rr'的最大值(按kod)。

令人遗憾的是,在select子句中,您只能放入group by子句中的列和/或聚合其他列中的函数。您可以将任何内容放在其中-用于过滤。您还可以在包含聚合函数表达式的组之后放置其他“ having”子句,这些表达式也可以用作组后过滤。

© www.soinside.com 2019 - 2024. All rights reserved.