2013-01-20 53 views
3

假設我有一個表:如何選擇行數乘以非零列? (MySQL的)

col1, col2, col3 
1  0  1.3 
0  0  0 
0  1  0 
1  1.5 1 

現在,讓我們說每一行都有一個「權重」,因爲這計算:

(col1 > 0 ? 1 : 0) + (col2 > 0 ? 1 : 0) + (col3 > 0 ? 1 : 0) 

如何可以選擇所有行的總重量?

隨着我所提供的總重量中的數據是2 + 0 + 1 + 3 = 6

回答

5

你只需要一個聚合SUM()周圍所有沒有GROUP BY的條件。

SELECT 
    SUM(
    (CASE WHEN col1 > 0 THEN 1 ELSE 0 END) 
    + (CASE WHEN col2 > 0 THEN 1 ELSE 0 END) 
    + (CASE WHEN col3 > 0 THEN 1 ELSE 0 END) 
) AS total_weight 
FROM your_table 

http://sqlfiddle.com/#!2/b0d82/1

我在這裏使用CASE WHEN...,因爲它是在任何RDBMS便攜。由於MySQL將返回的條件的布爾0或1,雖然,它可以在MySQL被簡化爲:

SELECT 
    SUM(
    (col1 > 0) /* returns 1 or 0 */ 
    + (col2 > 0) 
    + (col3 > 0) 
    ) AS total_weight 
FROM your_table 

http://sqlfiddle.com/#!2/b0d82/2