在sql子查询中使用GROUPBY

在sql子查询中使用GROUPBY,sql,subquery,Sql,Subquery,如何避免此错误: 无法在中使用的表达式中使用聚合或子查询 GROUPBY子句的GROUPBY列表 我的问题是: select Id, name,dayA,monthA,yearA, sum(x) as x, (select SUM(x) group by month) as total, from table_A group by Id,name,monthA,dAyA,yearA, SUM(x) 换言之: 样本数据: id name dayA monthA

如何避免此错误:

无法在中使用的表达式中使用聚合或子查询 GROUPBY子句的GROUPBY列表

我的问题是:

select Id, name,dayA,monthA,yearA, 
    sum(x) as x,
    (select SUM(x) group by month) as total,
    from table_A
    group by Id,name,monthA,dAyA,yearA, SUM(x)
换言之: 样本数据:

id name dayA monthA yearA  x
===========================
1  name1  2    3     2016   4
2  name2  2    3     2016   3
3  name1  2    3     2016   2      
预期结果:

id name dayA monthA yearA  x total
===================================
1  name1  2     3     2016  4  6
2  name2  2     3     2016  3  3 
3  name1  2     3     2016  2  6

提前感谢

您的查询有更多问题

选择SUMx group by month作为总计,是否来自同一个表,不太可能,因为您的group by中没有提到month列。在查询中使用子查询时,必须保证我只返回一条记录

根据您的样本数据和预期结果

     create table table_A(
id int,
name varchar(25),
dayA int,
monthA int,
yearA int,
x int
)

insert into table_A
values (1,'name1',2,3,2016,4),
        (2,'name2',2,3,2016,3),
        (2,'name1',2,3,2016,2)


select ta.id, ta.name, ta.dayA, ta.monthA, ta.yearA, ta.x, total.Total  from table_A as ta
left join 
(select name, sum(x) as Total from table_A group by name) total on ta.name = total.name
group by
ta.id, ta.name, ta.dayA, ta.monthA, ta.yearA, ta.x, total.name, total.Total

您很抱歉,查询有更多问题

选择SUMx group by month作为总计,是否来自同一个表,不太可能,因为您的group by中没有提到month列。在查询中使用子查询时,必须保证我只返回一条记录

根据您的样本数据和预期结果

     create table table_A(
id int,
name varchar(25),
dayA int,
monthA int,
yearA int,
x int
)

insert into table_A
values (1,'name1',2,3,2016,4),
        (2,'name2',2,3,2016,3),
        (2,'name1',2,3,2016,2)


select ta.id, ta.name, ta.dayA, ta.monthA, ta.yearA, ta.x, total.Total  from table_A as ta
left join 
(select name, sum(x) as Total from table_A group by name) total on ta.name = total.name
group by
ta.id, ta.name, ta.dayA, ta.monthA, ta.yearA, ta.x, total.name, total.Total

也许这就是你想要的:

select table_A.*, TotalSums.total
from table_A
left join (select name, monthA, dayA, yearA, sum(x) as total from table_A group by name, monthA, dayA, yearA) as TotalSums
    on table_A.name   = TotalSums.name
    and table_A.monthA = TotalSums.monthA
    and table_A.dayA = TotalSums.dayA
    and table_A.yearA = TotalSums.yearA
order by id

也许这就是你想要的:

select table_A.*, TotalSums.total
from table_A
left join (select name, monthA, dayA, yearA, sum(x) as total from table_A group by name, monthA, dayA, yearA) as TotalSums
    on table_A.name   = TotalSums.name
    and table_A.monthA = TotalSums.monthA
    and table_A.dayA = TotalSums.dayA
    and table_A.yearA = TotalSums.yearA
order by id

我想这就是你要找的

select Id, main.name,dayA,main.monthA,main.yearA, 
    sum(x) as x,
    ,max(total.total) as total
    from table_A as main
    join (select SUM(x) total ,name ,monthA,yearA from table_A group by name,monthA,yearA) as total
    on main.name = total.name
     and main.monthA = total.monthA
     and main.yearA = total.yearA
    group by Id,main.name,monthA,dAyA,yearA

我想这就是你要找的

select Id, main.name,dayA,main.monthA,main.yearA, 
    sum(x) as x,
    ,max(total.total) as total
    from table_A as main
    join (select SUM(x) total ,name ,monthA,yearA from table_A group by name,monthA,yearA) as total
    on main.name = total.name
     and main.monthA = total.monthA
     and main.yearA = total.yearA
    group by Id,main.name,monthA,dAyA,yearA


请提供示例数据和所需结果。错误源于子查询没有来源。此外,它与主查询无关,因此在该更正之后,所有输出行上的值都将相同,因此您的分组依据是extrange。如果它包含一个ID,而该ID是一个真实的ID,那么其余的字段就不相关了,而每个输出记录只来自表中的一个输入记录,因此总和也不相关。@GordonLinoff,请检查now@Magnolia . . . 您的示例数据与查询无关。列不相同。请提供示例数据和所需结果。错误源于子查询没有来源。此外,它与主查询无关,因此在该更正之后,所有输出行上的值都将相同,因此您的分组依据是extrange。如果它包含一个ID,而该ID是一个真实的ID,那么其余的字段就不相关了,而每个输出记录只来自表中的一个输入记录,因此总和也不相关。@GordonLinoff,请检查now@Magnolia . . . 您的示例数据与查询无关。列不一样。你能告诉我你的总计列是如何得到6 3 6的吗?当然,总计是一个列,它存储x的和,其中名称相等,我通过将4和2相加得到6。名称相同:名称1,值3,因为我只有一个记录的名称等于名称2,第二个6与第一个相同。谢谢您:。您正在按月分组,并希望按姓名计数。将选择表A中的top 1 SUMx,其中montha=montha group by montha as total更改为选择表A中的top 1 SUMx,其中name=name group by name as total。SUMx as x的用途是什么,因为您也在对其进行分组。是的,它没有意义。。这是因为我得到了一个错误,说sumx必须存在于组by中。你能告诉我如何在总计列中得到6 3 6吗?当然,总计是一个列,它存储名称相等的x和,我通过将4到2个名称相加得到6。名称相同:名称1,值3,因为我只有一个记录的名称等于名称2,第二个6与第一个相同。谢谢您:。您正在按月分组,并希望按姓名计数。将选择表A中的top 1 SUMx,其中montha=montha group by montha as total更改为选择表A中的top 1 SUMx,其中name=name group by name as total。SUMx as x的用途是什么,因为您也在对其进行分组。是的,它没有意义。。这是因为我得到一个错误,说sumx必须存在于组BY中,我正在等待您的更新,因为,我的答案是不正确的。或者我沉思一年,或者我描述一个月。这对我来说是合乎逻辑的。不幸的是。。。第二个选择中的列名是无效的路易斯,我尝试了你的最后一个答案,但它没有给我我所期望的。我真的很感谢你:我正在等待你的更新,因为我的答案不正确。或者我沉思一年,或者我描述一个月。这对我来说是合乎逻辑的。不幸的是。。。第二个选择中的列名是无效的路易斯,我尝试了你的最后一个答案,但它没有给我我所期望的。我真的很感谢你:非常感谢你,但它并没有按蒙塔对总计的值进行分组,所有结果记录都有相同的值,无论月份是什么……非常感谢你,但它没有按蒙塔对总计的值进行分组,所有结果记录都有相同的值,无论月份是什么。。。。