SQLite:根据同一个表中的选择结果值选择记录

时间:2018-04-14 07:53:00

标签: sql sqlite android-sqlite

我有一个表字段。例如: -

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字段= 30009远程值= 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是远程的。

这对你们来说可能很简单,但我是sqlite新手。因此,请帮助。

3 个答案:

答案 0 :(得分:0)

我实际上没有运行它,但是这样的事情应该做你需要的:

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

答案 1 :(得分:0)

如果我正确理解了您的问题,那么您希望对remote unique_id所在的30008列进行求和,但仅适用于那些id remote=1unique_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';

{{1}}

答案 2 :(得分:0)

您可以使用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