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 に答える