【问题标题】:How do i make a sql query using more than one tables with onde condition for each?如何使用多个表进行 sql 查询,每个表都有 onde 条件?
【发布时间】:2019-12-05 23:17:27
【问题描述】:

我想从一个表中获取一些数据,但由不同的条件分隔,例如一列有多少行等于 1,一列有多少行等于和相同,直到数字 5。我这样做了:

Select Count(E.ID) as emergencia,
Count(M.ID) as muitourgente,
count(U.ID) as urgente,
count (PU.ID) as poucourgente,
count (MU.ID) as menosurgente 
From ConsultaMedica as E,
ConsultaMedica as M,
consultaMedica as U,
consultamedica as PU,
consultamedica as MU

WHERE E.ID_gravidade = 1 And M.ID_gravidade = 2 AND U.ID_gravidade = 3 AND PU.ID_gravidade = 4 AND MU.ID_gravidade = 5;

我的表是“ConsultaMedica”,我想在一次查询中获得数字 1、2、3、4 和 5 出现在“ID_Gravidade”列中的次数。

我的结果是0|0|0|0|0,但我期望1|0|0|0|0,因为我有一行的“ID_Gavidade”列等于1,没有其他数字的列。

【问题讨论】:

  • 请标记您正在使用的 DBMS。
  • 您的答案在下方,但此评论是为了帮助您将来调试和理解。全为零的结果是因为最后四个值中的任何一个都没有行,并且where 子句强制每个值至少有一个。同样在更大的表上,查询将需要很长时间才能运行。

标签: sql database join group-by pivot


【解决方案1】:

不要交叉连接。您可以只使用条件聚合:

select 
    sum(case when ID_gravidade = 1 then 1 else 0 end) as emergencia,
    sum(case when ID_gravidade = 2 then 1 else 0 end) as muitourgente,
    sum(case when ID_gravidade = 3 then 1 else 0 end) as urgente,
    sum(case when ID_gravidade = 4 then 1 else 0 end) as poucourgente,
    sum(case when ID_gravidade = 5 then 1 else 0 end) as menosurgente
from ConsultaMedica
where ID_gravidade between 1 and 5

注意:如果ID_gravidade的所有值都在1到5之间,你可以去掉where子句。

【讨论】:

    【解决方案2】:

    自联接不是必需的,有多种方法可以做到这一点。根据您的数据库,您可能可以组合 SUMIIF

    SELECT SUM(IIF(ID_gravidade = 1, 1, 0)) as emergencia,
           SUM(IIF(ID_gravidade = 2, 1, 0)) as muitourgente,
           SUM(IIF(ID_gravidade = 3, 1, 0)) as urgente,
           SUM(IIF(ID_gravidade = 4, 1, 0)) as poucourgente,
           SUM(IIF(ID_gravidade = 5, 1, 0)) as menosurgente
    FROM ConsultaMedica
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 2022-12-13
      • 2020-03-23
      相关资源
      最近更新 更多