-1

我有两张表,一张是保存客户信息,另一张是对客户进行的诊断。我想获得 <5 >5 的诊断数量和得到诊断的男性/女性数量。

表格:

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

我想获得 3 月份 <5 >5 的诊断量和男性和女性的诊断量

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

提前致谢

4

2 回答 2

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(注意在诊断表中添加了两行)。

于 2013-04-18T11:07:21.537 回答
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

于 2013-04-18T11:12:01.613 回答