2009-08-21 32 views
11

Được rồi, vì vậy những gì tôi đang cố gắng thực hiện COUNT() khác nhau trên cùng một bảng dựa trên các tiêu chí khác nhau mà không có truy vấn lồng nhau (hiệu quả) hoặc truy vấn phụ có thể được đưa vào chế độ xem). Điều này có thể không?mySQL: Nhiều COUNT() s dựa trên các tiêu chí khác nhau

Ví dụ: bảng có cột ngày - truy vấn sẽ có thể tạo tổng số hàng trước & sau ngày cố định.

Trả lời

28

Bạn đang sử dụng MySQL, vì vậy bạn có thể tận dụng tính năng của nó mà biểu thức boolean đánh giá là 0 cho false và 1 cho true. Số SUM() của 1 bằng một số COUNT() trong đó biểu thức là đúng.

SELECT SUM(date_column < '2009-08-21') AS prior_to_date, 
     SUM(date_column > '2009-08-21') AS after_date 
FROM MyTable; 

PS: Đừng cố gắng này trên các nhãn hiệu khác của cơ sở dữ liệu duy trì hành vi tiêu chuẩn SQL, ví dụ: một biểu thức boolean mang lại một boolean, không phải là một 0 hoặc 1 số nguyên.

+0

Tuyệt vời - hoạt động tốt. Trong các cơ sở dữ liệu khác sử dụng cú pháp SQL, tôi giả sử có một IF bên trong hàm SUM trả về 1 hoặc 0 cho điều kiện cũng nên làm việc. – dborba

+1

Có. Nhưng sử dụng các biểu thức 'CASE' nếu bạn muốn di động nhất. Không có 'IF()' trong SQL chuẩn. –

+0

Tôi đã thử với nhiều và riêng biệt. Vấn đề tôi tìm thấy nếu tôi đặt tuyên bố chọn riêng với điều khoản where cần thiết, sau đó mysql sử dụng chỉ mục, nhưng khi kết hợp, nó không sử dụng chỉ mục. Kiểm tra bằng cách sử dụng giải thích. –

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