【发布时间】:2011-05-13 10:16:02
【问题描述】:
我有一个列名检查,数据类型位(真或假),我想做的是计算列中有多少假和真。
SELECT
COUNT(FeatureState) AS tot_true,
COUNT(*)-COUNT(FeatureState) AS tot_false
FROM productDetail
WHERE FeatureState= 1
这行得通
【问题讨论】:
标签: sql sql-server database count
我有一个列名检查,数据类型位(真或假),我想做的是计算列中有多少假和真。
SELECT
COUNT(FeatureState) AS tot_true,
COUNT(*)-COUNT(FeatureState) AS tot_false
FROM productDetail
WHERE FeatureState= 1
这行得通
【问题讨论】:
标签: sql sql-server database count
怎么样;
SELECT
COUNT(CASE fld WHEN 0 THEN 1 ELSE NULL END) AS ZEROS,
COUNT(CASE fld WHEN 1 THEN 1 ELSE NULL END) AS ONES
FROM
T
--alternative
SELECT
SUM(CASE fld WHEN 0 THEN 1 ELSE 0 END) AS ZEROS,
SUM(CASE fld WHEN 1 THEN 1 ELSE 0 END) AS ONES
FROM
T
【讨论】:
试试这个,应该可以的:
SELECT
COUNT(field) AS tot_true,
COUNT(*)-COUNT(field) AS tot_false
FROM table
WHERE field=1
【讨论】:
我已经使用 SIGN 将位更改为 int
SELECT
SUM(SIGN(field)) AS tot_true,
SUM(1-SIGN(field)) AS tot_false
FROM table
或者使用 COUNT 忽略 NULL 的事实
SELECT
COUNT(NULLIF(field, 0)) AS tot_true,
COUNT(NULLIF(field, 1)) AS tot_false
FROM table
如果您想要其他值 MAX(SomeOtherField),其中最高值来自其他解决方案中过滤掉的“假”行,则此方法有效
【讨论】:
SELECT
SUM(CASE WHEN FeatureState = 1 THEN 1 ELSE 0 END) AS TrueCount,
SUM(CASE WHEN FeatureState = 0 THEN 1 ELSE 0 END) AS FalseCount,
SUM(CASE WHEN FeatureState IS NULL THEN 1 ELSE 0 END) AS NullCount,
COUNT(1) AS TotalCount
FROM ProductDetail
【讨论】: