< 5> 5的诊断量和男性和女性mysql查询量

时间:2013-04-18 10:50:41

标签: mysql

我有两个表,一个是持有客户信息,另一个是对客户做出的诊断。我希望得到<5> 5的诊断量以及得到诊断的男性/女性的数量。

TABLES:

customers
**NAME**       **PID**      **BIRTH_DATE**    **SEX**
chris             1            1980-07-01        m
Jane              2            1977-10-05        f
Anna              3            1990-5-10         f
David             4            2008-1-10         m
Naomi             5            2009-10-20        f
juma              6            2010-10-15        m

**diagnosis**
**PID**      **date_done**       **diagnosis_code**
  1           2013-03-20           084
  1           2013-03-13           019
  2           2013-03-17           084
  5           2013-03-13           037
  3           2013-03-21           019
  4           2013-03-01           037

我希望获得5月5日的诊断数量以及3月份男性和女性的诊断数量

                      Year         Gender     
**Diagnosis_code      <5   >5       male    female**
?                    ?     ?         ?        ?

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以逐个分组,这样就可以了。

SELECT CASE WHEN d.diagnosis_code <5 THEN '<5' ELSE '>5' END,
       c.sex,
       count(*)
FROM customers c
JOIN diagnosis d
  ON c.pid=d.pid
WHERE d.diagnosis_code<>5
  AND MONTH(d.date_done)=3
GROUP BY CASE WHEN d.diagnosis_code <5 THEN '<5' ELSE '>5' END,
         c.sex;

Sqlfiddle(请注意,诊断表中会添加两行)。

答案 1 :(得分:1)

您没有指定<5>5的含义,但我假设您的意思是年龄。如果是这种情况,那么您可以使用:

select diagnosis_code,
  sum(case when ageInYears <5 then 1 else 0 end) `<5`,
  sum(case when ageInYears >5 then 1 else 0 end) `>5`,
  sum(case when sex = 'm' then 1 else 0 end) male,
  sum(case when sex = 'f' then 1 else 0 end) female
from
(
  select d.diagnosis_code,
    FLOOR(DATEDIFF(d.date_done, c.BIRTH_DATE)/365.25) AS ageInYears,
    c.sex
  from diagnosis d
  inner join customers c
    on d.pid = c.pid
) src
group by diagnosis_code

请参阅SQL Fiddle with Demo