COUNT và SUM cùng một lúc sau khi xóa các hàng trùng lặp


7

Tôi đang sử dụng PostgreSQL và tôi không thể tìm ra truy vấn để thực hiện COUNT và SUM gồm hai cột khác nhau. Về cơ bản tôi đang tìm kiếm một cái gì đó như mộtSUM(hits DISTINCT record_id)

Cái bàn:

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

Kết quả mong muốn:

status   unique_records_count  hits_sum
     0                      4         3
     1                      3         1

Làm một

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

trả lại

status   unique_records_count  hits_sum
     0                      4         4
     1                      3         2

2
Các lần truy cập phụ thuộc vào trạng thái và record_id hoặc có thể có hai bản ghi có cùng trạng thái và record_id nhưng lần truy cập khác nhau không? truy vấn của bạn trả về tất cả hệ thống cơ sở dữ liệu cùng một kết quả sqlfiddle.com/#!1/fb8b8/1
miracle173

Câu trả lời:


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

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;

Câu trả lời của JP Chauhan cũng sẽ cho bạn câu trả lời đúng. Dù bằng cách nào bạn đang đối phó với một truy vấn con. đáng để xem xét nhóm đó thường nhanh hơn phân biệt tùy thuộc vào những gì bạn đang làm.


0

Cảm ơn đã đăng bài này. Giải pháp của JP Chauhan cũng hoạt động tốt với các tham gia nội bộ trong truy vấn phụ của tôi để tính tổng số trường theo ngày. Tôi thấy rằng bí danh của tôi có vấn đề và phải sửa nó, nhưng những công việc khôn ngoan khác hoàn hảo.

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

chúng tôi chỉnh sửa định dạng của mã. Nếu bạn thích định dạng cũ, bạn có thể khôi phục thay đổi.
ypercubeᵀᴹ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.