我有两个表,一个是持有客户信息,另一个是对客户做出的诊断。我希望得到<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**
? ? ? ? ?
提前致谢
答案 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