SQL 按多列分组,但在子句中给出一个范围值
Posted
技术标签:
【中文标题】SQL 按多列分组,但在子句中给出一个范围值【英文标题】:SQL group by multiple columns but give one range value in clause 【发布时间】:2017-03-31 11:38:38 【问题描述】:有一个 PostgreSQL 语句,其中选择了多个字段并应进行分组。
select Max(field1),field1,field2,field3,field4,field5,field6,field7,field8,field9,field10, field11
from table2
group by field1,field2,field3,field4,field5,field6,field7,field8,field9,field10, field11
我可以按此查询分组而不在 group by 子句中给出所有字段名称吗?类似的东西
select Max(field1),field1,field2,field3,field4,field5,field6,field7,field8,field9,field10, field11
from table2
group by [2-12]
【问题讨论】:
必须按这么多列进行分组的情况很少见。我实际上想知道哪个更容易,只需复制并粘贴 select 子句中的列或计算其中的列数并相应地键入 [2-12] ;-) 那些对其中之一有功能依赖的分组列不需要包含在group by
子句中。
【参考方案1】:
Postgres 允许您使用数字作为列引用,但不能使用范围。所以,你可以这样做:
select Max(field1), field1, field2, field3, field4, field5, field6,
field7, field8, field9,field10, field11
from table2
group by 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;
【讨论】:
是的,它允许数字。是否有任何其他允许分组范围的数据库服务器? 不,而且数字不是 ANSI SQL。 @MuhammadImranTariq 。 . .其他一些数据库也可以(毕竟很多数据库在某种程度上都是基于 Postgres 代码库的)。但是,这不是标准 SQL。以上是关于SQL 按多列分组,但在子句中给出一个范围值的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句 group by子句后的分组项如果有多个是怎样进行分组的
【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段