Oracle - счетчик множественного выбора из разных таблиц - PullRequest
0 голосов
/ 24 марта 2020

Мне нужно получить информацию из 3 разных таблиц, которые в некоторой степени связаны, как таблица1 -> таблица2 -> таблица3

, проблема в том, что мне нужно подсчитать указанный столбец c в таблицах 2 и 3. только для table2 это работает так, как задумано, но как только я добавляю table3 точно так же, как я делал с table2, id изменяет счет table2 на счет table3 (что само по себе правильно)

код выглядит так:

select 1.ID, 1.SomeMoreInformation, count(2.ID), count(3.ID) 
from 1 
join 2 on 1.ID = 2.whatever 
join 3 on 3.ID = 2.something
group by 1.ID, 1.SomeMoreInformation
order by 1.ID

, как вы можете видеть, идентификатор таблицы находится в таблице2 -> мне нужно знать, как часто для каждого table1.ID и всех этих записей в таблице2 мне нужно знать, сколько они находятся в таблице 3, используя другой столбец

результат на данный момент:

1.id | 2.count | 3.count
1    | x       | x

вместо:

1.id | 2.count | 3.count
1    | x       | y

Ответы [ 2 ]

0 голосов
/ 25 марта 2020
table1            table2                                           table3
ID                  ID      | whatever     | something             ID        
--------            --------| ------------ | --------------        --------- 
123                321      |  123         |  1a2b                  1a2b   
                   654      |  123         |  3c4d                 5e6f    

ожидается, будет

count 2.id = 2

count 3.id = 1

это

count 2. id = 1

count 3.id = 1

0 голосов
/ 24 марта 2020

Я думаю, вам нужно использовать DISTINCT при подсчете количества идентификаторов следующим образом:

SELECT
    1.ID,
    1.SOMEMOREINFORMATION,
    COUNT(DISTINCT 2.ID), 
    count(DISTINCT 3.ID) 
from 1 left join 2 on 1.ID = 2.whatever 
       left join 3 on 3.ID = 2.something
group by 1.ID, 1.SOMEMOREINFORMATION 
ORDER BY 1.ID;

Если 2.ID запись сопоставляется с несколькими записями из таблицы 3, тогда будет несколько записей для один 2.ID и несколько 3.ID. Следовательно, использование DISTINCT даст вам правильную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...