gpt4 book ai didi

sql - 用子查询分组

转载 作者:行者123 更新时间:2023-12-03 17:53:16 25 4
gpt4 key购买 nike

我想知道是否可以在group by中使用子查询?使用sqlite作为示例,这些表如下:

create table t (foo int, bar int);
insert into t values (100, 100);
insert into t values (200, 200);


然后运行此查询:

select max(bar), foo from t group by (select 1);


退货

max(bar)    foo       
---------- ----------
200 200


我不确定这是什么意思?好像我在分组依据中放置的子查询一样,sqlite仍会返回相同的“答案”。

最佳答案

当您使用GROUP BY时,数据库将为每一行计算您在GROUP BY中给出的表达式,并为该表达式的每个不同结果创建一个组。

在您的查询中,(select 1)对所有行都得出相同的值,因此所有行都以同一组结尾。

使用不以某种方式依赖于表行的表达式是没有意义的。
如果使用correlated subquery查找其他值,则使用子查询可能会有所帮助:

> create table users(id, name);
> insert into users values (1, 'Tom'), (2, 'Dick'), (3, 'Harry');
> create table admins(userid);
> insert into admins values (1), (3);
> select group_concat(name)
from user
group by (select 1
from admins
where userid = user.id);
Dick
Tom,Harry


但是,此类查询的结果无法确定哪个组属于哪个组,除非您将相同的子查询添加到SELECT子句中。

关于sql - 用子查询分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com