2011-07-29 35 views
12
SELECT 
    SUM(
     CASE 
      WHEN cumulative = 1 
      THEN percent 
      ELSE 0 
     END) 
FROM phppos_items_taxes; 

Với tuyên bố trên không này thực hiện như sau:Mysql SUM với trường hợp tuyên bố

mysql> select * FROM phppos_items_taxes; 
+---------+-----------+---------+------------+ 
| item_id | name  | percent | cumulative | 
+---------+-----------+---------+------------+ 
|  1 | Tax 1  | 8.00 |   0 | 
|  1 | Tax 2  | 10.00 |   1 | 
|  3 | Sales Tax | 8.00 |   0 | 
|  4 | Tax 1  | 20.00 |   0 | 
|  4 | Tax 2  | 20.00 |   0 | 
+---------+-----------+---------+------------+ 

Liệu SUM này lên phần trăm cho mỗi hàng đó tích lũy = 1. Nếu tích lũy = 1 thì 0 được tóm gọn! .

Trả lời

25

Có chứ! Một truy vấn ngắn hơn và sạch hơn (IMHO) sẽ được sử dụng IF tuyên bố:

SELECT SUM(IF(cumulative = 1, `percent`, 0)) FROM phppos_items_taxes; 
+4

ngắn hơn, vâng, nhưng cú pháp IF() không phải là ANSI SQL. Sử dụng CASE làm tăng cơ hội được di chuyển, cho những gì có giá trị. –

+0

+1. Tôi sử dụng cú pháp này quá với mysql nhưng AFAIK "tổng (trường hợp khi ..." là một giải pháp tiêu chuẩn hơn. Chỉnh sửa. Khi tôi kết thúc bài viết của tôi, tôi đã nhìn thấy câu trả lời của Bill. :) –

+0

@Bill: Vâng, bạn nói đúng. Tôi hoàn toàn đồng ý với bạn. Tuy nhiên, có rất nhiều thứ trong MySQL, mà không phải là ANSI SQL, mà sẽ không làm cho mã SQL được viết cho MySQL mà di động theo mặc định. Rất có thể khi tính di động đến với câu hỏi, tất cả các truy vấn sẽ được kiểm tra, nhưng thật tuyệt vời khi bạn đưa nó lên, cảm ơn. :) – Shef

7

Tại sao không chỉ để lọc ra các mặt hàng?

SELECT 
    SUM(ISNULL(percent, 0)) 
FROM 
    phppos_items_taxes 
WHERE 
    cumulative = 1 

Trong trường hợp của bạn mỗi hàng sẽ được lựa chọn và CASE tuyên bố đã được áp dụng, tôi tin rằng với WHERE lọc nó sẽ là đáng kể nhanh hơn vì mệnh đề WHERE thực hiện trước khi mệnh đề SELECT

+2

@Chris Muench: Nếu truy vấn không liên quan đến các yếu tố khác, hãy sử dụng giải pháp này, nó thực sự nhanh hơn nhiều. :) – Shef

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