首页 > 解决方案 > 如何在单个选择语句中使用不同条件进行多个 COUNT

问题描述

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

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'

标签: sqlfirebird

解决方案


所有计数的条件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';

您还可以避免提及 else 部分 case when 语句,因为默认值为 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'; 

推荐阅读