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

问题描述 投票:1回答:3

我有一张桌子菲尔兹。例:-

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的新手。因此,请帮助。

sql sqlite android-sqlite
3个回答
0
投票

如果我正确地理解你的问题,那么你想要总结remoteunique_id 30008,但仅适用于那些有idremote=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';

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根据需要。


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
© www.soinside.com 2019 - 2024. All rights reserved.