我想知道是否可以在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仍将返回相同的“答案”。
答案 0 :(得分:2)
当您使用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子句,否则此类查询的结果不会识别哪个组。