sql - 如何在单个 select 语句中创建具有不同条件的多个 COUNT

标签 sql firebird

我在下面做了三个选择,每个选择都返回一个值。我如何只进行选择并返回三个值,每个值都有其条件?所有信息都在一张表中。

SELECT COUNT (GRA_HRFIM) as "Conferidos antes 17h" FROM GRADE WHERE GRA_HRFIM < '17:00:00' AND GRA_DATADIGITA = '04/28/2021'

SELECT COUNT (GRA_HORADIGITA) as "Importados antes 17h" FROM GRADE WHERE GRA_HORADIGITA < '17:00:00' AND GRA_DATADIGITA = '04/28/2021'

SELECT COUNT (GRA_HRFIM) as "Total pedidos" FROM GRADE WHERE GRA_DATADIGITA = '04/28/2021'

最佳答案

条件 GRA_DATADIGITA = '04/28/2021' 对于所有计数都是相同的,因此在 where 子句中使用它。现在您只需选择 COUNT (GRA_HRFIM) 即可进行第三次计数,但对于第一次和第二次计数,您需要使用 case when 语句来选择条件计数。

SELECT COUNT(case when GRA_HRFIM < '17:00:00' then GRA_HRFIM else null end)
         AS "Conferidos antes 17h",
       COUNT(case when GRA_HORADIGITA < '17:00:00' then GRA_HORADIGITA else null end)
         AS  "Importados antes 17h",
       COUNT(GRA_HRFIM)
         AS "Total pedidos"
  FROM GRADE
 WHERE GRA_DATADIGITA = '04/28/2021';

您还可以避免在 case when 语句中提及 else 部分,因为默认值为 null。

SELECT COUNT(case when GRA_HRFIM < '17:00:00' then GRA_HRFIM end)
             AS "Conferidos antes 17h",
           COUNT(case when GRA_HORADIGITA < '17:00:00' then GRA_HORADIGITA end)
             AS  "Importados antes 17h",
           COUNT(GRA_HRFIM)
             AS "Total pedidos"
      FROM GRADE
     WHERE GRA_DATADIGITA = '04/28/2021'; 

关于sql - 如何在单个 select 语句中创建具有不同条件的多个 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67323663/

相关文章:

firebird - 保护 firebird 嵌入文件

sql - Delphi 上需要 SQL 解析器

sql - Firebird 数据类型列字段不正确

firebird - 如何在 Firebird 中轻松更改字段类型或字段长度?

sql - 在 hive 表中插入的值,双引号用于来自 csv 文件的字符串

mysql - C语言如何防止SQL注入(inject)?

java - Hibernate多对多关系

sql - 如何在 DB2 中透视表?

sql - 级联删除已打开?

.net - firebird插入数据,必须声明命令参数