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

ビューを使用する代わりに、単純な選択クエリを作成するにはどうすればよいですか?

    必要なのはHAVING COUNT(*) = 2を検索する句 日付と専門分野でグループ化した後。実際、ネストは必要ありません。 (暗黙の結合をコンマ区切りのFROMに置き換えました 明示的なJOINを含む句 、これはより好ましい現代の構文です。

    SELECT 
      v.pid,
      d.speciality,
      v.date,
      COUNT(COUNT DISTINCT d.did) AS numvisits
    FROM 
      visits v
      JOIN Doctors d ON v.did = d.did
    GROUP BY v.pid, d.speciality, v.date
    HAVING COUNT(COUNT DISTINCT d.did) = 2
    /* Note - depending on your RDBMS, you may
       be able to use the count alias as
    HAVING numvisits = 2 
       MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */
    

    SELECT ここにリストし、GROUP BY これらの3つの列の合計の組み合わせについて、患者ID、専門分野、日付、および訪問数を生成する必要があります。 HAVING 次に、条項は、グループに2回訪問した人だけに制限します。

    のみをプルするには これからの患者は、サブクエリでラップします:

    SELECT Patients.* 
    FROM Patients JOIN (
      SELECT 
        v.pid,
        d.speciality,
        v.date,
        COUNT(COUNT DISTINCT d.did) AS numvisits
      FROM 
        visits v
        JOIN Doctors d ON v.did = d.did
      GROUP BY v.pid, d.speciality, v.date
      HAVING COUNT(COUNT DISTINCT d.did) = 2
    ) subq ON Patients.pid = subq.pid
    


    1. MariaDB rootユーザーのパスワードとunix_socket認証を有効にしますか?

    2. SELECT句とWHERE句でのストアド関数呼び出しの最適化

    3. CSVファイルをMySQLデータベースにインポートする際のUTF-8文字列が無効です

    4. クエリに基づいて複数の行を挿入するにはどうすればよいですか?