Sql 从值不同的一列中计数记录
我对SQL server和堆栈溢出还比较陌生,所以如果我的问题用词不当或幼稚,请原谅我。 我试着搜索,但找不到我要找的东西 我有一个表,其中有一个colummn唯一标识符varchar 50,另一个column1为INT,其值为1、2、3或4。我正在尝试创建一个SELECT resultset,该集合统计column1中值小于4的所有记录,另一个计数返回column1等于4的记录数。是否可以在一个查询中创建此结果集 理想情况下,我希望我的结果集如下所示:Sql 从值不同的一列中计数记录,sql,sql-server,tsql,counting,Sql,Sql Server,Tsql,Counting,我对SQL server和堆栈溢出还比较陌生,所以如果我的问题用词不当或幼稚,请原谅我。 我试着搜索,但找不到我要找的东西 我有一个表,其中有一个colummn唯一标识符varchar 50,另一个column1为INT,其值为1、2、3或4。我正在尝试创建一个SELECT resultset,该集合统计column1中值小于4的所有记录,另一个计数返回column1等于4的记录数。是否可以在一个查询中创建此结果集 理想情况下,我希望我的结果集如下所示: Total Records
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
;
在完成一些搜索后,我尝试了以下方法:
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
;
它返回一个结果集,其中“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都返回非NULL值
因此,您还可以:
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;
请注意,我重命名了这些列,因此它们不需要转义。仅对字符串和日期常量使用单引号。是否尝试使用SUM更改第二个计数?也不要使用数字作为字符“1”,而是使用1I也将用SUM替换第三个计数。为什么使用SUM?我不确定他想要一栏的总和。也许我错过了什么。150条记录=4的总和为600,而不是150。@TinyHaitian,因为COUNT也将计算0。对于SUM,添加0不会增加您的数字。你们可以自己试试,看看计数是否有效。啊,我重读了他的问题。现在明白了。仍然需要调整。我会在我这边重新评估。