SQL选择多个案例的计数
我想要一个列,其中我计算itemtype包含两个指定值之一或location包含两个指定值之一的事务。 前两列(itemtype和location)给出了正确的数字,但第三列似乎统计了所有事务,而与itemtype或location无关。 我做错了什么SQL选择多个案例的计数,sql,aggregate-functions,Sql,Aggregate Functions,我想要一个列,其中我计算itemtype包含两个指定值之一或location包含两个指定值之一的事务。 前两列(itemtype和location)给出了正确的数字,但第三列似乎统计了所有事务,而与itemtype或location无关。 我做错了什么 SELECT COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype', COUNT(CASE WHEN location IN ('Lattla
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype',
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) 'location',
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
ELSE 0
END) 'total'
FROM statistics
对于最后一个,您可以使用
SUM
代替下面的COUNT
-
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype',
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) 'location',
sum(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) 'total'
FROM statistics
对于最后一个,您可以使用
SUM
代替下面的COUNT
-
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype',
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) 'location',
sum(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) 'total'
FROM statistics
您不需要添加
ELSE
部件:
SELECT COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) AS itemtype,
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) AS location,
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) AS total
FROM statistics;
您不需要添加
ELSE
部件:
SELECT COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) AS itemtype,
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) AS location,
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) AS total
FROM statistics;
我认为,第三个条件如下
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') OR location IN ('Lattlast','Appelhyllan') THEN 1 END) AS total
FROM statistics;
我认为,第三个条件如下
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') OR location IN ('Lattlast','Appelhyllan') THEN 1 END) AS total
FROM statistics;
COUNT
计数非空值,这意味着它还“计数”来自ELSE
部分的0
。完全删除其他部分:
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype',
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) 'location',
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) 'total'
FROM statistics
COUNT
计数非空值,这意味着它还“计数”来自ELSE
部分的0
。完全删除其他部分:
SELECT
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1 END) 'itemtype',
COUNT(CASE WHEN location IN ('Lattlast','Appelhyllan') THEN 1 END) 'location',
COUNT(CASE WHEN itemtype IN ('BARNTAL','STORSTIL') THEN 1
WHEN location IN ('Lattlast','Appelhyllan') THEN 1
END) 'total'
FROM statistics
您的预期输出是什么?您好,您使用的是哪些DBMS(例如SQL Server、MySQL等)。为什么您不能在where中匹配位置和项目类型clause@Klas只需将ELSE 0更改为ELSE NULL或删除它,因为ELSE NULL已经暗示。您期望的输出是什么?您好,您使用的是哪种DBMS(例如SQL Server、MySQL等)为什么不能在where中匹配位置和项目类型clause@Klas只需将ELSE 0更改为ELSE NULL或将其删除,因为已暗示ELSE NULL。另一种方法是在原始计数版本中将ELSE 0更改为ELSE NULL。或者将其删除,否则已暗示为空。:)另一种方法是在原始计数版本中将ELSE 0更改为ELSE NULL。或者将其删除,否则已暗示为空。:)