PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ogranicz dołączenie do jednego wiersza

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;

Twoje zapytanie w pytaniu zawiera niedozwoloną agregację w innym agregacie:

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

Uproszczona i przekonwertowana na składnię prawną:

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

Ale czy naprawdę chcesz pomnożyć przez liczbę na grupę?

Pobieram pojedynczy wiersz na grupę w "EsnsSalesOrderItems" z DISTINCT ON . Szczegółowe wyjaśnienie:

Dodałem również aliasy tabel i formatowanie, aby zapytanie było łatwiejsze do przeanalizowania dla ludzkich oczu. Jeśli możesz uniknij przypadku wielbłąda może pozbyć się wszystkich podwójnych cudzysłowów zaciemnia widok.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak sprawić, by postgres ignorował wstawki ze zduplikowanym kluczem, ale idź dalej?

  2. Komentować znak/znaki w postgres / postgresql / psql?

  3. ogólny błąd sql

  4. Jak odtworzyć usuniętą tabelę za pomocą Django Migrations?

  5. Czy istnieje bezpieczny sposób na zmodyfikowanie tabeli pg_constraint tak, aby nie wykonywać więcej sprawdzania (tymczasowo)?