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 中按多列分组并按日期排序?

SQL语句 group by子句后的分组项如果有多个是怎样进行分组的

【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段

按多列分组并从 R 中的另一列分配值

如何在Oracle sql中将行转换为按多列分组的列[关闭]

SQL group by分组查询