如何使用SQL计算特定行中的值的数量?

时间:2016-02-09 16:19:57

标签: mysql sql

数据库

    id     decline     maintaining     losing
     1        true           false       true
     2       false           false      false
     3        true            true      false

我想使用SQL语句基于id计算真值的数量。

4 个答案:

答案 0 :(得分:0)

如果这是所有列,请使用:

SELECT id,
       (case when decline = 'true' then 1 else 0 end) +
       (case when maintaining= 'true' then 1 else 0 end) +
       (case when losing= 'true' then 1 else 0 end) as HowMuchTrue
FROM YourTable

答案 1 :(得分:0)

select sum(if(maintaining = 'true', 1, 0)) from table -- and here some conditions.

答案 2 :(得分:0)

在MySQL中,如果是boolean字段,您可以直接将它们添加到一起:

SELECT id, decline + maintaining + losing
FROM mytable

Demo here

答案 3 :(得分:0)

问题似乎有点模糊,但我想我知道你的目的是什么。对于每一行,您需要计算“真实”显示在其中的次数。

为此,我们将使用CASE语句将true处理为1,将false处理为零

def square(x)
  x ** 2
end 

square(3) #=> 9
square(4) #=> 16

这会给我们带来以下结果:

SELECT
    id,
    CASE
    WHEN decline = 'true' THEN 1
    WHEN decline = 'false' THEN 0
    else 'check your logic'
    END as decline_processed,
    CASE
    WHEN maintaining = 'true' THEN 1
    WHEN maintaining = 'false' THEN 0
    else 'check your logic'
    END as maintaining_processed,
    CASE
    WHEN losing = 'true' THEN 1
    WHEN losing = 'false' THEN 0
    else 'check your logic'
    END as losing_processed
    FROM
    [table]

从这里,我们可以获取结果并收集它们并获得每行的总和。

id, decline_processed, maintaining_processed, losing_processed
1 , 1, 0, 1
2, 0, 0, 0
3, 1, 1, 0

这将得到这些结果,我相信这些结果可以回答你的问题:

    SELECT
    id,
    SUM(query_result_alias.decline_processed 
+ query_result_alias.maintaining_processed 
+ query_result_alias.losing_processed
) as number_of_true_values
    FROM
    [query with case statement above] as query_result_alias
    GROUP BY
    query_result_alias.id

奖金,我们可以将结果处理成摘要数据

id, number_of_true_values
1, 2
2, 0
3, 2

这将获得具有每个真值数的行数:

SELECT
COUNT(query_result_alias2.id) as counter,
query_result_alias2.number_of_true_values
FROM
[query with case statement above] as query_result_alias2
GROUP BY
query_result_alias2.number_of_true_values

使用示例数据,您将只有两个结果,但更大的数据集将提供所有选项。