sql >> Database teknologi >  >> RDS >> PostgreSQL

Begræns tilslutning til én række

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;

Din forespørgsel i spørgsmålet har et ulovligt aggregat over et andet aggregat:

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

Forenklet og konverteret til lovlig syntaks:

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

Men vil du virkelig gange med antallet pr. gruppe?

Jeg henter den enkelte række pr. gruppe i "EsnsSalesOrderItems" med DISTINCT ON . Detaljeret forklaring:

Jeg tilføjede også tabelaliasser og formatering for at gøre forespørgslen nemmere at parse for menneskelige øjne. Hvis du kunne undgå kamel tilfælde kunne slippe af med alle de dobbelte anførselstegn uklar udsigten.



  1. MySQL-decimalfelter returneres som strenge i PHP

  2. Nogen forslag til et db-skema til lagring af relaterede søgeord?

  3. Hvordan eksporteres resultatet til forskellige faner i Excel i Toad for Data Analyst?

  4. MYSQL-udløsere:JSON_SEARCH en heltalsværdi i et json-array af heltal