1

有一个包含列的表(在 SQLITE DB 中):

CREATE TABLE TEST_TABLE(TC_ID INTEGER NOT NULL, CONF_ID INTEGER NOT NULL, SAMPNAME TEXT NOT NULL, SAMPSIZE INTEGER NOT NULL, PRIMARY KEY(TC_ID, CONF_ID, SAMPNAME) );

需要能够计算任何给定 TC_ID(即按 TC_ID 分组)的所有唯一(DISTINCT)SAMPNAME 条目,以及每个 TC_ID 的这些唯一 SAMPNAME 条目的 SAMPSIZE 总和。

注意:每个唯一的 SAMPNAME 对表中的所有行都具有相同的 SAMPSIZE。

试过:

 select count(distinct SAMPNAME), sum(SAMPSIZE), TC_ID from TEST_TABLE group by TC_ID

它给出了不同 SAMPNAME 计数的预期值,但没有给出 SAMPSIZE 的预期 SUM(因为它在 SAMPNAME 不不同时重新考虑了 SAMPSIZE)

如果我执行以下操作,将获得所需的结果:

select DISTINCT TC_ID from TEST_TABLE

然后对于每个 DISTINCT TC_ID,调用

select count(sn), sum(ss), TC_ID from (select distinct SAMPNAME as sn,SAMPSIZE as ss, TC_ID from TEST_TABLE where TC_ID=$currTCID)

是否可以在单个 SQLite SQL 查询中实现上述目标?

(不幸的是,SQLite 似乎不支持 OVER/PARTITION BY 构造。)

希望问题足够清楚..

编辑

虽然查询与 CL 提供的 SQL 一起工作正常(谢谢!),但还想知道是否存在不同的表/模式设计,它可以执行比要求为每个组/行执行相关子查询更有效的查询?

提前致谢!

4

1 回答 1

0

使用相关子查询:

select count(distinct SAMPNAME),
       (select sum(ss)
        from (select distinct SAMPNAME,
                              SAMPSIZE as ss
              from TEST_TABLE as T2
              where T2.TC_ID = T1.TC_ID)
       ),
       TC_ID
from TEST_TABLE as T1
group by TC_ID
于 2013-07-02T12:24:25.297 回答