COUNT und SUM gleichzeitig nach dem Entfernen doppelter Zeilen

7

Ich verwende PostgreSQL und kann keine Abfrage für eine COUNT und eine SUMME aus zwei verschiedenen Spalten finden. Grundsätzlich suche ich so etwas wie einSUM(hits DISTINCT record_id)

Der Tisch:

status      record_id      hits     
     0            123         1
     0            123         1
     0            124         1
     0            125         1
     0            126         0
     1            123         0
     1            124         0
     1            125         1
     1            125         1

Das gewünschte Ergebnis:

status   unique_records_count  hits_sum
     0                      4         3
     1                      3         1

A tun

SELECT status, COUNT(DISTINCT record_id), SUM(hits)
FROM table
GROUP BY status

kehrt zurück

status   unique_records_count  hits_sum
     0                      4         4
     1                      3         2
Lufonio
quelle
2
hängen Treffer von Status und record_id ab oder ist es möglich, dass es zwei Datensätze mit demselben Status und record_id, aber unterschiedlichen Treffern gibt? Ihre Abfrage gibt ein all - Datenbanksystem das gleiche Ergebnis sqlfiddle.com/#!1/fb8b8/1
miracle173

Antworten:

5
Select A.status,count (A.record_id),sum(A.hits)
from 
(Select distinct status,record_id,hits from YourTable) A
group by A.status
JP Chauhan
quelle
0
WITH distinct_records (status, record_id, hits) (
    SELECT max(status, record_id, hits 
      FROM your_table
  GROUP BY status, record_id, hits -- group by faster than distinct
)
SELECT status, count(record_id), sum(hits) from distinct_records;

Die Antwort von JP Chauhan sollte Ihnen auch die richtige Antwort geben. In beiden Fällen handelt es sich um eine Unterabfrage. Es ist zu bedenken, dass das Gruppieren nach je nach dem, was Sie tun, oft schneller als unterschiedlich ist.

Chris Travers
quelle
0

Vielen Dank für die Veröffentlichung. Die Lösung von JP Chauhan funktionierte auch gut mit inneren Verknüpfungen in meiner Unterabfrage, um die Anzahl der Felder nach Datum zu summieren. Ich stellte fest, dass mein Alias ​​ein Problem hatte und dieses beheben musste, aber andere weise funktionieren perfekt.

select a.ptype, a.mydate, sum(a.pcount) as ProvCount
from 
   (select bkcat."Pe" ptype
         , count (distinct a.id) as pcount
         , to_char(a.upload_date,'mm/yyyy') as MYDate
    from teuplas a   
    inner join catalog as bkcat 
        on a.id = bkcat.upload_id
    where a.upload_date between '2015/05/28' and '2015/06/02'  
      and bkcat."Pe" = '...'
    group by a.upload_date, bkcat."Pe"
           , to_char(a.upload_date,'mm/dd/yyyy')
    -- order by a.upload_date desc
    -- limit 2000
    -- upload_date, (to_char(date_trunc('month',a.upload_date),'mm') 
    --             ||'/'
    --             ||to_char(date_trunc('year',a.upload_date),'yy')) 
    --                         as "Upload_Month/Year",
   ) as a
group by ptype, a.mydate
xzmilan
quelle
Wir haben die Formatierung des Codes bearbeitet. Wenn Sie die alte Formatierung bevorzugen, können Sie die Änderung rückgängig machen.
Ypercubeᵀᴹ