Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GROUPBY和不使用子查询重写SQL查询_Sql - Fatal编程技术网

使用GROUPBY和不使用子查询重写SQL查询

使用GROUPBY和不使用子查询重写SQL查询,sql,Sql,使用没有HAVING子句的GROUPBY的SQL查询可以使用子查询重写。一个简单的例子如下: select A.a_id, sum(B.b_count) Bsum from A left join B on A.a_id = B.a_id group by A.a_id select A.a_id, ( select sum(b.b_count) Bsum from B where A.a_id = B.a_id ) from A 你能给我举一个不能做到的例子吗?

使用没有HAVING子句的GROUPBY的SQL查询可以使用子查询重写。一个简单的例子如下:

select A.a_id, sum(B.b_count) Bsum
from A
left join B on A.a_id = B.a_id
group by A.a_id

select A.a_id, 
(
    select sum(b.b_count) Bsum
    from B 
    where A.a_id = B.a_id
)
from A

你能给我举一个不能做到的例子吗?我的意思是,如果无法使用SELECT?后面的子查询重写没有数据的GROUP BY SQL查询,我认为如果要在同一个表中聚合和按值分组,这将很困难

select A.a_id, sum(B.b_count) Bsum
from A
left join B on A.a_id = B.a_id
group by A.a_id, b.otherVal

听起来像是我的家庭作业。我投票结束这个问题,因为它根本不是一个编程问题。嗯,这是什么样的问题?好吧,这不是因为分组中的计算,而是因为B表是分组中的一部分,所以找到反例是很简单的。这回答了你的问题吗?我想即使在这种情况下,查询也可以在没有分组的情况下重写:选择不同的A1.a\u id,B1.a\u id,从A2上的A2左连接b B2中选择sumB2.b\u计数。A2.a\u id=A1.a\u id和B2.a\u id=B1.a\u id从A1上的A1左连接b B1中选择sumB2.b\u计数。a\u id=B1.a\u id=B1以同样的精神,我可以用分组后的计算重写您的原始查询。但是,FROM后面的子查询是必需的。Distinct当然只是groupby*by另一个名称!也许如果你通过一个链接表c在表a和表b之间建立了多对多的关系,并按a和c中的事物进行分组。。。