我有一张桌子菲尔兹。例:-
id remote unique_id
1 23 30007
1 24 30008
1 1 30009
2 4 30007
2 5 30008
2 1 30009
3 6 30007
3 7 30008
3 2 30009
这里我想获得unique_id field = 30008远程值的总和,其中unique_id field = 30009 remote value = 1;
基本上,我想要的是:(查询1)
select SUM(remote) from Fields where unquie_id = '30008';
和一个添加过滤器:(查询2)
select remote from Fields where unquie_id = '30009';
我想选择查询2的_id记录,其中remote = 1表示我的查询1。
所以上面的输出将是:24+5=29.
在这里我选择_id为1,2。 _id = 3将被拒绝,因为它对于unique_id = 30009是远程的2。
这对你们来说可能很简单,但我是sqlite的新手。因此,请帮助。
如果我正确地理解你的问题,那么你想要总结remote
列unique_id
30008
,但仅适用于那些有id
和remote=1
的unique_id=30009
组。
SELECT SUM(f1.remote)
FROM Fields f1
INNER JOIN
(
SELECT id
FROM Fields
GROUP BY id
HAVING SUM(CASE WHEN unique_id = '30009' AND remote = 1 THEN 1 ELSE 0 END) > 0
) f2
ON f1.id = f2.id
WHERE unique_id = '30008';
我实际上没有运行它,但这样的事情应该做你需要的:
select SUM(remote) from Fields as F where F.unique_id = '30008' and F.id in (select remote from Fields as G where G.unique_id = '30009');
所以我测试了它:
create table Fields(id integer, remote integer, unique_id integer);
insert into Fields(id, remote, unique_id) values (1, 23, 3007), (1, 24, 30008), (1 ,1 ,30009), (2, 4, 30007), (2 , 5 , 30008), (2 , 1 , 30009), (3 , 6, 30007), (3 , 7, 30008
), (3 , 2 , 30009);
/*select * from Fields;*/
select SUM(remote) from Fields as F where F.unique_id = '30008' and F.id in (select remote from Fields as G where G.unique_id = '30009');
输出为:29根据需要。
你可以使用exists
select sum(remote) total
from Fields f
where exists (
select 1 from Fields
where remote = f.id and unique_id = 30009
) and f.unique_id = 30008