sql - 计算sql中的非零值

标签 sql sql-server

我正在尝试计算每个单独列大于零的总次数,按驱动程序名称分组。现在我有;

SELECT drivername
      , COUNT(over_rpm)      AS RPMViolations
      , COUNT(over_spd)      AS SpdViolations
      , COUNT(brake_events)  AS BrakeEvents
  FROM performxbydriverdata
 WHERE  over_rpm > 0
    OR over_spd > 0
    OR brake_events > 0
GROUP BY drivername

这给了我所有非零值,但我得到的显示为:

  • 鲍勃·史密斯 62 62 62
  • 内森·琼斯 65 65 65
  • 等等

我正在尝试获取每个单独值中的非零计数。每个违规行为应单独分组。

最佳答案

使用NULLIF将零改为NULL,count忽略NULL

SELECT drivername,
     COUNT(NULLIF(over_rpm,0)) AS RPMViolations,
     COUNT(NULLIF(over_spd,0)) AS SpdViolations,
     COUNT(NULLIF(brake_events,0)) AS BrakeEvents
FROM performxbydriverdata
GROUP BY drivername;

您也可以删除该组中的 WHERE 子句以提高性能
OR 条件经常因为匹配好的索引而运行得很糟糕

使用 HAVING (按照其他答案)将删除所有 3 个聚合都为零的任何行,这对您可能有用也可能没有用。如果需要,您可以添加此内容。也就是说,WHERE 意味着至少一行具有非零值,因此您不需要同时使用 WHERE 和 HAVING 子句

关于sql - 计算sql中的非零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775115/

相关文章:

sql - SSRS 2008 R2 : An expression of non-boolean type specified in a context where a condition is expected, 附近 ','

sql - 根据SQL Server中的配置表生成汇总数据

sql - 如何编写 select inside case 语句

sql - 根据另一列的不同值聚合一列

sql - 如何使用 SQL 创建数据累积报告?

sql - 获取另一个唯一 ID 中每个唯一 ID 的平均条目数

sql - 从access vba中的多值组合框中获取值

sql-server - 查询子查询

sql - 管理员可以使用 SQL Server 2016 始终加密功能查看加密数据吗?

php - MS SQL Server 通过 Linux 上的 PHP 支持非模拟准备语句