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

同じテーブルから2つのクエリを抽出します

    SELECT b.name, a.*, a.sum2 - a.sum3 AS diff
    FROM  (
        SELECT id
             , sum(CASE WHEN value_type = 2 THEN value::int END) AS sum2
             , sum(CASE WHEN value_type = 3 THEN value::int END) AS sum3
        FROM   data
        WHERE  id = 1
        AND    value_type IN (2, 3)
        AND    dayhour >= '2015-12-12 0:0'::timestamp
        AND    dayhour <  '2015-12-13 0:0'::timestamp
        GROUP  BY 1
        ) a
    JOIN   device b USING (id);
    
    • dayhourを想定 はデータ型タイムスタンプです(情報がありません)。日付にキャストすると、基本インデックスが無効になります。そのため、sargable に変換しました。 述語。詳細:
    • キャストvalue::intが選ばれる理由 ?
    • 最初に集約してから、デバイスに参加します。安い。



    1. MySQLでのREGEXP_LIKE()関数のしくみ

    2. SpringJDBCのサポートと大規模なデータセット

    3. 文字列内の単語のOracle検索リストと既存の単語の再真

    4. doctrine2、symfony2、postgresqlエンティティの場合