SQL比内部计数函数更好
我想这样做,但它抛出了一个sql错误:SQL比内部计数函数更好,sql,sql-server,count,Sql,Sql Server,Count,我想这样做,但它抛出了一个sql错误: SELECT COUNT(items > 0) as totalItems FROM testTable Incorrect syntax near '>'. 我的目的是计算所有大于0的项目。它在MySQL中工作得很好,但SQLServer2008不喜欢它 谢谢。在SQL Server中,您需要一个案例语句: SELECT SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) as totalItems
SELECT COUNT(items > 0) as totalItems FROM testTable
Incorrect syntax near '>'.
我的目的是计算所有大于0的项目。它在MySQL中工作得很好,但SQLServer2008不喜欢它
谢谢。在SQL Server中,您需要一个
案例
语句:
SELECT SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) as totalItems
FROM testTable;
如果您执行以下操作,则可以使用COUNT()
:
SELECT COUNT(CASE WHEN items > 0 THEN 1 END) as totalItems
FROM testTable;
但是我更喜欢使用SUM()
或者,如果项
为非负项:
SELECT COUNT(NULLIF(items, 0)) as totalItems
FROM testTable;
在SQL Server中,需要一个
case
语句:
SELECT SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END) as totalItems
FROM testTable;
如果您执行以下操作,则可以使用COUNT()
:
SELECT COUNT(CASE WHEN items > 0 THEN 1 END) as totalItems
FROM testTable;
但是我更喜欢使用SUM()
或者,如果项
为非负项:
SELECT COUNT(NULLIF(items, 0)) as totalItems
FROM testTable;
好吧,这个问题本身可能就是
SELECT COUNT(*) as totalItems
FROM testTable
WHERE items > 0
但是如果它是WHERE
子句不适用的较大查询的一部分,那么您可以使用
SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END)
正如戈登所建议的那样。好吧,这个问题本身可能就是一个问题
SELECT COUNT(*) as totalItems
FROM testTable
WHERE items > 0
但是如果它是WHERE
子句不适用的较大查询的一部分,那么您可以使用
SUM(CASE WHEN items > 0 THEN 1 ELSE 0 END)
正如戈登所说。我从来没有像现在这样爱MySQL=)。为什么会有这种偏好?@Shackrock。将布尔数作为整数处理是MySQL的一个特性,我非常喜欢它。@Shackrock。我不喜欢计数(2)=
计数(1)
。似乎很容易产生误解。我从来没有像现在这样爱MySQL=)。为什么会有这种偏好?@Shackrock。将布尔数作为整数处理是MySQL的一个特性,我非常喜欢它。@Shackrock。我不喜欢计数(2)=计数(1)
。这似乎很容易引起误解。