sql >> データベース >  >> RDS >> Mysql

特定の値が複数の行で発生する回数をカウントするSQLクエリ

    はい。あなたが持っているものはうまくいくはずです。 (派生テーブルにエイリアスを追加する必要があります。取得するエラーメッセージは自明である必要があります。簡単に修正できます。クエリの最後にスペースと文字c(または任意の名前)を追加するだけです。

    (VoterID, ElectionID)が重複する可能性に関する注意点が1つあります。 タプル。

    (VoterID、ElectionID)に一意の制約がある場合、クエリは正常に機能します。

    一意の制約がない場合(重複する(VoterID, ElectionId)は許可されません )の場合、ElectionID 1に2行あり、ElectionID2に行がない有権者の可能性があります...その有権者がカウントに含まれる可能性があります。また、ElectionID 1で2回、ElectionID 2で1回だけ投票した投票者は、カウントから除外されます。

    COUNT内にDISTINCTキーワードを含めると、その問題が修正されます。例:

    HAVING COUNT(DISTINCT ElectionID) = 2
    

    クエリの書き方は異なりますが、あなたが持っているものは機能します。

    ElectionID 1とElectionID2の両方に参加したVoterIDの数を取得するには、パフォーマンスを向上させるために、インラインビューの使用を避けます(MySQLでは派生テーブルと呼ばれます)。代わりに、クエリでJOIN操作を使用します。このようなもの:

    SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
      FROM elections e1
      JOIN elections e2
        ON e2.voterID = e1.voterID
     WHERE e1.electionID = 1
       AND e2.electionID = 2
    

    (voterID, ElectionID)が保証されている場合 が一意である場合、選択はより簡単になる可能性があります:

    SELECT COUNT(1) AS NumVoters
      FROM elections e1
      JOIN elections e2
        ON e2.voterID = e1.voterID
     WHERE e1.electionID = 1
       AND e2.electionID = 2
    


    1. Dockerを使用してTimescaleDBをデプロイするためのガイド

    2. 2020年の計画でデータベース監視を優先する必要がある4つの理由

    3. MariaDB JSON_ARRAY()の説明

    4. PostgreSQLはPL/pgSQLでトランザクションを開始/終了できません