拥有一个包含列的表(在SQLITE数据库中):
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的所有唯一(DISTINCT)SAMPNAME条目(即按TC_ID分组),以及每个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(谢谢!),但是还想知道是否存在不同的表/模式设计,它可以执行比要求为每个组执行相关子查询更有效的查询/行?
提前致谢!
答案 0 :(得分: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