объединить результаты из двух таблиц sql - PullRequest
0 голосов
/ 18 ноября 2010

Я хотел бы получить результаты из двух таблиц, сгруппированных по одним и тем же правилам, объединенных в один выбор.

У меня есть таблица 1

create table person AS 
id INTEGER,
gender INTEGER,
state VARCHAR2
name VARCHAR2
surname VARCHAR2

таблица 2

create table sampletest as
person_id FOREIGN KEY To person.id
result INTEGER

таблица 3

create table examtest as 
person_id FOREIGN KEY to person.id
examresult INTEGER

Я хотел бы получить этот вывод

сгруппировать по штатам |сгруппировать по полу |считать (экзамен> 0) |count (результат> 0 и результат <4) </p>

Я пробовал что-то вроде этого

select state,gender,count(e.examresult),count(s.result) where 
p.id=s.person_id and p.id=e.person_id and 
s.result>0 and s.result<4 and 
e.examresult>0 group by state,gender

, но я получаю результаты, которые зависят друг от друга.Как получить независимые результаты в один выбор?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010
  SELECT state,gender,
         SUM(CASE WHEN e.examresult > 0 THEN 1 ELSE 0 END) AS EXAM_GT_ZERO,
         SUM(CASE WHEN s.result BETWEEN 0 AND 4 THEN 1 ELSE 0 END) AS SMPL_0_to_4
    FROM person p
         LEFT JOIN sampletest s
         ON p.id = s.person_id 
         LEFT JOIN examtest e
         ON p.id = e.person_id
GROUP BY state,gender
0 голосов
/ 18 ноября 2010

Build sub-select

select
  p.state,
  p.gender,
  sum( 
    ( select count(1) from examtest e 
      where e.personid = p.personid 
      and e.examresult > 0 ) ) as examcount,
  sum( 
    ( select count(1) from sampletest s 
      where s.personid = p.personid
      and s.result > 0 and s.result < 4) ) as samplecount
from
  person p
group by
  p.state,
  p.gender
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...