Как сделать агрегацию по sql объединениям? - PullRequest
0 голосов
/ 08 мая 2020

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

EXE1 (Папка, отчет)

FOLDER | REPORT
Axis  | Savings
Axis  | Deposit
Icici | credit
Icici | debit 
Axis  | Savings

EXE2 (Папка, отчет)

FOLDER | REPORT
Axis  | Savings
Axis  | Deposit
Icici | credit
Icici | debit 
Axis  | deposit
Icici | credit

Мне нужно количество отчетов, присоединяясь две таблицы

Что я пробовал

Select exe1.folder,exe1.report,count(exe1.report) e1,count(exe2.report)e2
From Exe1 
  join Exe2 On exe1.folder=exe2.folder 
   And exe1.report=exe2.report
Where exe1.report='savings'
group by exe1.folder,exe1.report

Это дает результат

Folder | Report |e1 | e2
Axis   | Savings|2  | 2 

Но мне нужно

Folder | Report |e1 | e2
Axis   | Savings|2  | 1 

Кто-нибудь может сказать мне, как чтобы получить результаты и как справиться с таким сценарием ios.

1 Ответ

0 голосов
/ 08 мая 2020

Вы не поняли count(). Он подсчитывает количество строк с ненулевыми значениями для выражения. Вот почему эти два значения совпадают. Вы можете исправить свой logi c, используя count(distinct):

select exe1.folder, exe1.report, count(distinct exe1.report) as e1,
       count(distinct exe2.report) as e2
from Exe1 join
     Exe2
     on exe1.folder = exe2.folder and exe1.report = exe2.report
where exe1.report='savings'
group by exe1.folder, exe1.report;

Это, вероятно, не самый эффективный способ решения вашей проблемы. Но если ваши подсчеты малы, то потеря производительности не так уж и велика. Обычно перед присоединением лучше использовать коррелированные подзапросы или агрегат .

...