基于为另一列选择的不同行组对列进行SUM

时间:2013-07-02 11:51:31

标签: sql sqlite

拥有一个包含列的表(在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(谢谢!),但是还想知道是否存在不同的表/模式设计,它可以执行比要求为每个组执行相关子查询更有效的查询/行?

提前致谢!

1 个答案:

答案 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