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

Dlaczego wynik COUNT podwaja się, gdy dołączam dwa?

Odpowiedź jest bardzo prosta. Masz dwa record i dwa alarm . Dołączasz do nich i otrzymujesz cztery rekordy, które liczysz.

Możesz obejść ten problem, licząc różne identyfikatory:

COUNT(DISTINCT records.id) AS "last24HMessagesCount",
COUNT(DISTINCT alarms.id) AS "activeAlarmsCount"

ale nie polecam tego. Dlaczego dołączasz do record i alarm w każdym razie? Nie są bezpośrednio powiązane. Czego chcesz dołączyć to liczba record i numer alarm . Więc zbierz się przed dołączeniem:

SELECT 
  device.id, 
  device.name, 
  records.cnt AS "last24HMessagesCount", 
  alarms.cnt AS "activeAlarmsCount"
FROM device
LEFT OUTER JOIN 
(
  SELECT deviceId, count(*) AS cnt
  FROM record
  WHERE "date" > '2017-07-12 11:43:02.838 +00:00'
  GROUP BY deviceId
) AS records ON device.id = records.deviceId
LEFT OUTER JOIN 
(
  SELECT deviceId, count(*) AS cnt
  FROM alarm
  WHERE status = 'new'
  GROUP BY deviceId
) AS alarms ON device.id = alarms.deviceId
WHERE device.serviceId = 1832
  AND device.groupId = 205;

(Usunąłem niepotrzebne dołączanie do tabeli „grupa”).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:pętla aż do spełnienia warunku

  2. Tworzenie tabeli w trybie pojedynczego użytkownika w postgres

  3. psycopg2:Zaktualizuj wiele wierszy w tabeli wartościami z krotki

  4. Czy powinienem określić zarówno INDEX, jak i UNIQUE INDEX?

  5. rekurencyjnie spłaszcz zagnieżdżony jsonb w postgresie bez nieznanej głębokości i nieznanych pól kluczowych