从一列计数记录,其中值不同

问题描述 投票:1回答:3

我对SQL服务器和堆栈溢出还很陌生,所以如果我的问题用词错误或天真,请原谅我。我尝试搜索,但找不到确切的内容。

我有一个表,其列为唯一标识符 (varchar 50),另一个INTcolumn1的值为1、2、3或4。我试图创建一个[ C0]结果集,其中SELECTcolumn1中所有值小于4的记录,而另一个COUNT返回column1等于4的记录数。是否可以创建此记录一个查询结果集?

理想情况下,我希望结果集如下所示:

COUNT

完成一些搜索后,我尝试了以下操作:

Total Records       Records w/ *column1* < 4             Records w/ *column1* = 4
===========           ==================                     ================
   1000                      850                                    150

将返回结果集,其中“ Record w / 4”和“ Total”都等于相同的数字。

sql sql-server tsql counting
3个回答
1
投票

尝试此-

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
; 

0
投票

您只是在寻找简单的条件聚合为

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

0
投票

我更喜欢为此目的使用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()值的数量-并且NULLthen都返回非else值。

所以,您也可以这样做:

NULL

请注意,我已重命名了列,因此不需要对其进行转义。仅对字符串和日期常量使用单引号。

© www.soinside.com 2019 - 2024. All rights reserved.