代码之家  ›  专栏  ›  技术社区  ›  Genesis

计算患者(女性和男性)第一次咨询的次数以及随后的咨询次数

  •  1
  • Genesis  · 技术社区  · 11 年前

    我有两张这样的桌子:

    Table Pacient
    ---------------------
    id|    name     |sex|
    01|    george   |m  |
    02|    laura    |f  |
    03|    holly    |f  |
    04|    bill     |m  |
    05|    gene     |m  |
    06|    elizabeth|f  | 
    ---------------------
    
    Table Consulting
    ------------------------
    id|diagnostic|id_pacient
    01| random   |01
    02| random   |02
    03| random   |04
    04| random   |01
    05| random   |04
    06| random   |03
    07| random   |06
    08| random   |05
    09| random   |03
    ------------------------
    

    我想展示一张这样的桌子:

    -------------------------
    sex|subsequent|first_time
    m  |4         | 1
    f  |2         | 2
    -------------------------
    

    到目前为止,我从自己的数据中得到了这一点:

    -------------------------
    sex|subsequent|first_time
    m  |16        | 1(wrong value)
    -------------------------
    

    我从这个查询中得到了以上结果:

    select
      p.sex,
      count(c.id_pacient) as subsquent, 
      count(distinct c.pacientes_id) as first_time 
    from pacient p 
    inner join consulting c on p.id=c.id_pacient 
    group by c.id_pacient having subsequent > 1;
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   Bohemian    11 年前

    使用子查询计算每个患者就诊的次数,然后使用案例对不同列求和:

    select
      sex, 
      sum(visits = 1) single_visit, 
      sum(visits > 1) subsequent
    from (select p.sex, count(*) as visits
          from pacient p
          join consulting c on p.id=c.id_pacient
          group by c.id_pacient) x
    

    在mysql中,您可以使用 sum(condition) 计算它是真的次数,因为真是1,假是0。


    要确保在输出中表示两种性别,请使用包含两种性别值的行集的左联接:

    select
      s.sex, 
      sum(visits = 1) single_visit, 
      sum(visits > 1) subsequent
    from (select 'm' sex union select 'f') s
    left join (select p.sex, count(*) as visits
          from pacient p
          join consulting c on p.id=c.id_pacient
          group by c.id_pacient) v
        on v.sex = s.sex