繁体   English   中英

在SQL中选择具有相同ID的另一行时的字段总和

[英]Aggregate sum of a field when another row with the same ID is selected in SQL

我有两张桌子

CREATE TABLE users
(
  id int
);

CREATE TABLE attributes
(
  user_id int,
  k char(100),
  v char(100)
);

insert into users values (1);
insert into users values (2);
insert into users values (3);

insert into attributes values (1, 'k1', 'v1');
insert into attributes values (1, 'k2', 2);
insert into attributes values (2, 'k1', 'v1');
insert into attributes values (2, 'k2', 7);
insert into attributes values (3, 'k1', 'v2');
insert into attributes values (3, 'k2', 11);

我想要的是

  • 对于属性表中的每个不同v1 ,将同一user_id下另一行的值求和,并得出k=k2

所以我想要像

 v1 9
 v2 11

当前的SQL:

SELECT v, '?' as total 
FROM users 
JOIN attributes ON users.id = attributes.user_id 
WHERE k = 'k1' 
GROUP BY v

http://sqlfiddle.com/#!2/36920/3/0

这正是您所需要的。 不过,我完全同意aardvarkk的观点,最终明智的选择可能只是简化您的架构。 无论如何..

SELECT a1.v, SUM(a2.v) FROM users u
INNER JOIN attributes a1 ON a1.user_id = u.id
INNER JOIN attributes a2 ON a2.user_id = a1.user_id AND a2.k = 'k2'
WHERE a1.k = 'k1'
GROUP BY a1.v
create table sumv
(
vnmbr nchar(2),
v int
)
declare @nmbr nvarchar
set @nmbr = 1
while @nmbr < 3
begin
insert into sumv (vnmbr,v)
select 'v'+@nmbr,v from attributes where [user_id] in (select [user_id] from attributes
where v = 'v'+@nmbr) and v not like 'v%'
set @nmbr = @nmbr + 1
end
select vnmbr,sum(v) as [sumv] from sumv group by vnmbr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM