Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Group by - Nhận các cột không đếm

COUNT chỉ trả về COUNT cho trạng thái mà anh ta tìm thấy cho Microsoft. Và đó là Bị từ chối và Bị rút lại. Bạn phải cung cấp cho truy vấn tất cả các trạng thái và COUNT lần xuất hiện của tất cả chúng. Những cái không xuất hiện trong bảng sẽ được để lại bằng 0:

SELECT a.STATUS, 
      SUM(CASE 
        WHEN b.STATUS IS NOT NULL
          THEN 1
        ELSE 0
      END) AS StatusCount
FROM (
  SELECT DISTINCT STATUS
  FROM tab1
  ) a
LEFT JOIN tab1 b ON a.STATUS = b.STATUS AND b.CompanyName = 'Microsoft'
GROUP BY a.STATUS;

Điều này có nghĩa là:

SELECT DISTINCT STATUS
FROM tab1

Điều này tìm thấy tất cả các trạng thái có thể. Nếu bạn có một bảng tham chiếu với tất cả các trạng thái có thể, tốt hơn nữa là Sử dụng bảng đó thay vì truy vấn này.

Sau đó, bạn thực hiện THAM GIA TRÁI trên bảng này theo trạng thái và tên công ty. Bằng cách này, bạn sẽ chỉ nhận được một trận đấu ở TRẠNG THÁI nếu có một bản ghi trên bảng. Nếu có, bạn thêm 1 vào SUM, nếu không, bạn thêm 0.

bản trình diễn sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật bảng nối với các giá trị mới

  2. Cách đếm kết quả MySQL trong mối quan hệ có-nhiều-qua

  3. Làm thế nào để chỉ định đối chiếu với PDO mà không cần ĐẶT TÊN?

  4. Cách tiếp cận tình huống tiến thoái lưỡng nan:xuất đơn đặt hàng từ hệ thống magento cũ nhập vào magento mới, các ID chồng chéo

  5. SUM () không hoạt động trong MySQL:SUM () với DISTINCT