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;