2016-01-11 25 views
5

Thưa đồng stackoverflowers,PostgreSQL: Làm thế nào để chọn 2 đếm khác nhau từ bảng khi x = a và x = b

Làm thế nào người ta có thể chọn 2 đếm khác nhau từ cùng một bảng cho các kịch bản:

x=a and x=b 

cụ thể, (WHEN type = subdomain) AND (WHEN subtype = subdomain)?

để thêm chúng lại với nhau để tạo 'tổng số tiền'?

nỗ lực của tôi (để bạn tham khảo):

SELECT description, type, count(1), subtype, count(2) 
FROM mapping, (dotcom WHERE type = subdomain) AS typecount, 
    (dotcom WHERE subtype = subdomain) AS subtypecount 
GROUP BY description, type, subtype 
HAVING count(1)>1 
AND count(2)>1 
ORDER BY count(*) 
DESC LIMIT 10 

nỗ lực thứ hai:

SELECT description 
FROM mapping, SUM(WHEN subdomain = type OR subdomain = subtype) AS count(1) 
GROUP BY description, type, subtype 
HAVING count(1)>1 
ORDER BY count(*) 
DESC LIMIT 10 
+1

Có thể với một số 'SUM (WHEN type = subdomain THEN 1 ELSE 0 END)' –

+0

Tôi cần SUM để tăng khi loại và subtype = subdomain, vì vậy có thể SUM (WHEN type OR subtype = subdomain THEN 1 ELSE 0 END;) <- điều này có khả thi không? – user5527252

+0

Bạn cũng có thể thử sử dụng Count (loại riêng biệt), Count (subtype riêng biệt) –

Trả lời

0

Nếu tôi đã hiểu yêu cầu của bạn một cách chính xác, Bạn có thể làm như dưới đây

SELECT description, SUM(CASE WHEN subdomain = type OR subdomain = subtype THEN 1 ELSE 0 END) 
FROM mapping 
GROUP BY description 
0

Sử dụng

SELECT 
     SUM(
      CASE WHEN type = 'whatever' 
       THEN column_name_1 
       ELSE coumn_name_2 
      END AS column1, 
      CASE WHEN subtype = 'whatever2' 
      THEN column_name_3 
      ELSE coumn_name_4 
      END AS column2 
    ) 
0

Nếu bạn có Postgres 9.4 hoặc mới hơn, bạn có thể sử dụng FILTER, dễ đọc hơn nhiều so với cú pháp CASE WHEN ... END.

SELECT 
    description, 
    type, 
    COUNT(*) FILTER (WHERE subdomain = type) AS typecount, 
    subtype, 
    COUNT(*) FILTER (WHERE subtype = subdomain) AS subtypecount 
FROM mapping 
GROUP BY description, type, subtype; 

Cần lưu ý rằng count(1)count(2) không làm những gì bạn có thể nghĩ nó; count là một hàm tổng hợp được tính nếu giá trị đã cho không phải là rỗng trong mỗi hàng, và nhìn thấy khi bạn đang cho nó một số nguyên theo nghĩa đen, nó sẽ chỉ đếm số hàng được trả về một cách hiệu quả.

Các vấn đề liên quan