SQL IBM netteza Aiginityワークベンチで、複数の列に対して異なる組み合わせの数を数える必要があります。
id1 id2 id3 id4 id5 id6
NY 63689 eiof 394 9761 9318
NY 63689 secf 064 9742 78142
CT 39631 pfef 92169 9418 9167
CT 39631 bfbde 23457 10052 618146
結果は
id1 id2 value
NY 63689 2
CT 39631 2
それぞれの異なるid2とid2に対して、id3、id4、id5、id6のいくつかの異なる組み合わせを見つける必要があります。
私のSQLクエリ:
SELECT id1, id2,
(
SELECT count(*) as dis_id_by_id1_id2
from
(
select distinct id3 , id4 ,id5 ,id6
FROM my_table
group by id1, id2
) t
)
from my_table
group by id1, id2
私はエラーがある:
id3 must be GROUPed or used in an aggregate function
id3、id4、id5、id6をグループ化した場合結果は間違っています。
count(distinct id3、id4)はIBM netezzaでは許可されていません。
どんな助けもありがとう。
回答:
回答№1は1あなたが最初にユニークな組み合わせを生成するためにクエリを書くなら、あなたは入れ子にされたサブクエリとしてそれを使うことができます。
そしてそれは単純なGROUP BYとCOUNT()です。
SELECT
id1,
id2,
COUNT(*) AS value
FROM
(
SELECT
id1, id2, id3, id4, id5, id6
FROM
myTable
GROUP BY
id1, id2, id3, id4, id5, id6
)
AS uniques
GROUP BY
id1,
id2
回答№2の場合は1
Postgresでは、これを配列とカウントで行うことができます。
select id1, id2,
count(distinct string_to_array(id3::text, "") || id4::text || id5::text || id6::text)
from table t
group by id1, id2;