COUNTの最小条件を持つ列の組み合わせのSELECTオカレンス
Aug 23 2020
私は毎日いくつかのデータをOptionsDataテーブルに保存しています。この表では、「asofdate」と「contract」の2つの列に関心があります。asofdate + Contractの組み合わせは一意である必要があります。そうでない場合は、クリーンアップを行う必要があります。次のように3つの列を返します:asofdate !! 契約する !!カウント> 1
これにより、テーブル内の重複を識別できます。私は以下を試しました:
select asofdate, contract, count(*) mycount
from (select asofdate, contract
from public."OptionsData"
group by asofdate, contract
) AS DerivedTable
GROUP BY asofdate, contract
HAVING mycount > 1
ORDER BY mycount DESC
しかし、これはエラーを返します:
ERROR: column "mycount" does not exist
指定しても同じことが起こります
HAVING DerivedTable.mycount > 1
(HAVINGの代わりにWHEREステートメントも試しましたが、これにより別のエラーが発生します:
ERROR: syntax error at or near "WHERE"
)
言うまでもなく、私はSQLの初心者です...
回答
3 ThorstenKettner Aug 23 2020 at 13:48
GROUP BY
句にエイリアス名を使用することはできません。その上:なぜサブクエリ?これにより、行がasofdateとコントラクトごとに1つに減るので、後でカウントすると、asofdate /コントラクトのペアごとに1のカウントが得られます。
select asofdate, contract, count(*) as mycount
from public.optionsdata
group by asofdate, contract
having count(*) > 1
order by mycount desc;