从值不同的一列中计算记录
Count Records from One Column WHERE values are different
我对 SQL-服务器和堆栈溢出还很陌生,如果我的问题措辞不当或天真,请原谅我。
我尝试搜索,但找不到我要找的东西。
我有一个 table 的列 唯一标识符 (varchar 50)
,另一个 column1 INT
的值为 1、2、3 或 4。我正在尝试创建一个 SELECT
结果集,其中 COUNT
包含 [=27= 中值小于 4 的所有记录]column1 和另一个 COUNT
其中 returns column1 等于 4 的记录数。是否可以在一个查询中创建此结果集?
理想情况下,我希望我的结果集如下所示:
Total Records Records w/ *column1* < 4 Records w/ *column1* = 4
=========== ================== ================
1000 850 150
完成一些搜索后,我尝试了以下方法:
SELECT COUNT(unique_id) 'Total'
, COUNT(CASE
WHEN column1 = 4 THEN '1'
ELSE '0'
END) AS 'Records w/ 4'
, COUNT(CASE
WHEN column1 < 4 THEN '1'
ELSE '0'
END) AS 'Records < 4'
FROM mytable
;
returns 一个结果集,其中 'Record w/ 4' 和 'Total' 都等于相同的数字。
试试这个-
SELECT COUNT(*) 'Total'
, SUM(CASE WHEN column1 = 4 THEN 1 ELSE 0 END) AS 'Records w/ 4'
, SUM(CASE WHEN column1 < 4 THEN 1 ELSE 0 END) AS 'Records < 4'
FROM mytable
您只是在寻找一个简单的条件聚合,如
SELECT COUNT(1) Total,
SUM(CASE WHEN Value < 4 THEN 1 ELSE 0 END) LessThan4,
SUM(CASE WHEN Value = 4 THEN 1 ELSE 0 END) EqualTo4,
SUM(CASE WHEN Value > 4 THEN 1 ELSE 0 END) MoreThan4
FROM
(
VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5)
) T(Id, Value);
为此我更喜欢使用 sum()
,但您也可以使用 count()
。您的方法不起作用,因为 count()
计算非 NULL
值的数量 - then
和 else
return 非 [=14] =] 值。
所以,你还可以这样做:
SELECT COUNT(unique_id) as Total,
COUNT(CASE WHEN column1 = 4 THEN 1 END) AS Records_eq_4,
COUNT(CASE WHEN column1 < 4 THEN 1 END) AS Records_lt_4,
COUNT(CASE WHEN column1 > 4 THEN 1 END) AS Records_gt_4
FROM mytable;
请注意,我重命名了这些列,因此它们不需要转义。仅对字符串和日期常量使用单引号。
我对 SQL-服务器和堆栈溢出还很陌生,如果我的问题措辞不当或天真,请原谅我。 我尝试搜索,但找不到我要找的东西。
我有一个 table 的列 唯一标识符 (varchar 50)
,另一个 column1 INT
的值为 1、2、3 或 4。我正在尝试创建一个 SELECT
结果集,其中 COUNT
包含 [=27= 中值小于 4 的所有记录]column1 和另一个 COUNT
其中 returns column1 等于 4 的记录数。是否可以在一个查询中创建此结果集?
理想情况下,我希望我的结果集如下所示:
Total Records Records w/ *column1* < 4 Records w/ *column1* = 4
=========== ================== ================
1000 850 150
完成一些搜索后,我尝试了以下方法:
SELECT COUNT(unique_id) 'Total'
, COUNT(CASE
WHEN column1 = 4 THEN '1'
ELSE '0'
END) AS 'Records w/ 4'
, COUNT(CASE
WHEN column1 < 4 THEN '1'
ELSE '0'
END) AS 'Records < 4'
FROM mytable
;
returns 一个结果集,其中 'Record w/ 4' 和 'Total' 都等于相同的数字。
试试这个-
SELECT COUNT(*) 'Total'
, SUM(CASE WHEN column1 = 4 THEN 1 ELSE 0 END) AS 'Records w/ 4'
, SUM(CASE WHEN column1 < 4 THEN 1 ELSE 0 END) AS 'Records < 4'
FROM mytable
您只是在寻找一个简单的条件聚合,如
SELECT COUNT(1) Total,
SUM(CASE WHEN Value < 4 THEN 1 ELSE 0 END) LessThan4,
SUM(CASE WHEN Value = 4 THEN 1 ELSE 0 END) EqualTo4,
SUM(CASE WHEN Value > 4 THEN 1 ELSE 0 END) MoreThan4
FROM
(
VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5)
) T(Id, Value);
为此我更喜欢使用 sum()
,但您也可以使用 count()
。您的方法不起作用,因为 count()
计算非 NULL
值的数量 - then
和 else
return 非 [=14] =] 值。
所以,你还可以这样做:
SELECT COUNT(unique_id) as Total,
COUNT(CASE WHEN column1 = 4 THEN 1 END) AS Records_eq_4,
COUNT(CASE WHEN column1 < 4 THEN 1 END) AS Records_lt_4,
COUNT(CASE WHEN column1 > 4 THEN 1 END) AS Records_gt_4
FROM mytable;
请注意,我重命名了这些列,因此它们不需要转义。仅对字符串和日期常量使用单引号。