【发布时间】:2016-06-28 19:13:34
【问题描述】:
示例表:
col1 col2 col3 col4
Abe 1 0 1
Bob 0 1 0
Cam 1 1 1
Dan 1 0 0
Eve 1 1 1
如何查询SUMcol1中有多少人一共有2个1? (所以,由于 Abe 是唯一有 2 个 1 的人,因此查询输出数字 1。)
谢谢。
【问题讨论】:
示例表:
col1 col2 col3 col4
Abe 1 0 1
Bob 0 1 0
Cam 1 1 1
Dan 1 0 0
Eve 1 1 1
如何查询SUMcol1中有多少人一共有2个1? (所以,由于 Abe 是唯一有 2 个 1 的人,因此查询输出数字 1。)
谢谢。
【问题讨论】:
Select count(*) from table_name where col2+col3+col4=2
【讨论】:
如果您的列值仅包含0 和1,那么Vlad Călin Buzea 和scaisEdge 答案将适合您。但如果它可以有0 和1 以外的其他值,你需要这个。
SELECT COUNT(*)
FROM Table_Name
WHERE (CASE WHEN col2 = 1 THEN 1 ELSE 0 END) +
(CASE WHEN col3 = 1 THEN 1 ELSE 0 END) +
(CASE WHEN col4 = 1 THEN 1 ELSE 0 END) = 2
【讨论】:
;WITH cte AS (
SELECT 'Abe' AS Col1, CAST(1 AS BIT) as Col2, CAST(0 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT 'Bob' AS Col1, CAST(0 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(0 AS BIT) AS Col4
UNION ALL
SELECT 'Cam' AS Col1, CAST(1 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT 'AbeWNull' AS Col1, CAST(1 AS BIT) as Col2, CAST(NULL AS BIT) as Col3, CAST(1 AS BIT) AS Col4
)
SELECT *
FROM
cte
WHERE
ISNULL(CAST(Col2 AS INT),0) + ISNULL(Col3,0) + ISNULL(Col4,0) = 2
cte 为您提供了一些测试数据。 2 件事。 1 如果它是Boolean 或bit 列,您可能必须将cast/convert 转换为integer 或numeric 数据类型至少其中一列,否则添加将不起作用。是的,我测试过并且需要。其次,如果你不处理null 的潜力,你可能得不到你想要的答案。
例如。
SELECT 1 + NULL + 1
会给你NULL
在列上使用SUM 是不一样的,它只会忽略nulls,但不会在添加行期间。
【讨论】:
在 where 子句中使用添加列并选择 count()
select count(*)
from my_table
where CAST(ifnull(col2,false) AS SIGNED INTEGER) +
CAST(ifnull(col3,false) AS SIGNED INTEGER) +
CAST(ifnull(col4,false) AS SIGNED INTEGER) = 2;
【讨论】: