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

結合を1行に制限する

    SELECT (count(*) * sum(s."price")) AS amount
         , 'rma'       AS "creditType"
         , c."company" AS "client"
         , c.id        AS "ClientId"
         , r.* 
    FROM   "Rmas"            r
    JOIN   "EsnsRmas"        er ON er."RmaId" = r."id"
    JOIN   "Esns"            e  ON e.id = er."EsnId"
    JOIN  (
       SELECT DISTINCT ON ("EsnId") *
       FROM   "EsnsSalesOrderItems"
       ORDER  BY "EsnId", "createdAt" DESC
       )                     es ON es."EsnId" = e."id"
    JOIN   "SalesOrderItems" s  ON s."id" = es."SalesOrderItemId"
    JOIN   "Clients"         c  ON c."id" = r."ClientId"
    WHERE  r."credited" = FALSE
    AND    r."verifyStatus" IS NOT NULL 
    GROUP  BY c.id, r.id;
    

    問題のクエリに、別の集計よりも不正な集計があります:

    sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
    

    簡略化され、正当な構文に変換されます:

    (count(*) * sum(s."price")) AS amount
    

    しかし、本当にグループごとの数を増やしたいですか?

    "EsnsSalesOrderItems"でグループごとに1行を取得します DISTINCT ONを使用 。詳細な説明:

    また、テーブルのエイリアスとフォーマットを追加して、人間の目でクエリを解析しやすくしました。 キャメルケースを回避できる場合は、すべての二重引用符を取り除くことができます ビューを曇らせます。



    1. MySQLは保存されたUTC時間をローカルタイムゾーンに変換できますか?

    2. 選択または作成ステートメントのデータベース列

    3. Postgresテーブルにレコードが存在するかどうかを確認します

    4. PHPの特殊文字を削除します