Невозможно получить точное количество во время агрегации на основе условия - PullRequest
0 голосов
/ 13 марта 2019

У меня есть таблица с именем tbl1. Который содержит 3 столбца empId, Обозначение и salaryScale

empId   Designation     salaryScale
Arun    Developer          1
Kiran   Developer          0
Anu     ITA                2

Я хотел бы получить общее число людей, имеющих конкретное назначение в качестве DesCount, и мне необходимо получить счет salaryScale для каждого назначения, где salaryScale> 0, и агрегировать их на уровне назначения.

Ниже мой запрос и вывод

выберите Обозначение, count (Обозначение) как DesCount, count (salaryScale) как scaleCount из tbl1, где salaryScale> 0, группа по назначению;

Designation DesCount    scaleCount
Developer       1       1
ITA             1       1

Но я ожидаю

Designation DesCount    scaleCount
Developer       2       1
ITA             1       1

потому что для обозначения разработчика общее количество равно 2.

Я что-то не так делаю в своем запросе?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

выражение случая использования

select Designation,count(Designation) as DesCount,
sum(case when salaryScale>0 then 1 else 0 end) as scaleCount 
from table_name  
group by Designation
1 голос
/ 13 марта 2019

Вы можете попробовать ниже, используя case when expression и удалить where condition

ваше условие где отфильтровывается, тогда оно засчитывается, так что вы не получаете желаемого результата

select Designation,count(Designation) as DesCount,
count(case when salaryScale>0 then 1 end) as scaleCount 
from tbl1  
group by Designation
...