2015-01-14 2 views
-2

У меня есть эта таблица/вид:Sql граф внутри групп

Department number_of_customers number_of_employess 

dep1   10     15 
dep3   20     18 
dep1   11     11 
dep2   6     8 
dep2   20     1 

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

Мой текущий запрос выглядит следующим образом:

 
    SELECT dep,count(*) 
    FROM My_table 
    WHERE n_of_cust > n_of_employees 
GROUP BY dep 

, но это не то, что я хочу, потому что
например dep1 не отображается в таблице результатов
и я бы хотел, чтобы он присутствовал.

PS: пожалуйста, кто-нибудь поможет мне с отступом стола.

+0

В ИНЕКЕ у вас есть «n_of_cust> n_of_employees», что означает не будут включены не dep1 строки. Затем вы говорите, что хотите включить dep1. Вы должны решить, должен ли быть dep1 или нет! Что вы пытаетесь сосчитать кстати? Почему dep1 и dep2 дважды упоминаются в вашей таблице? – jarlh

ответ

2

Выражение как number_of_customers > number_of_employees имеет значение либо 1 (истинной) или 0 (ложной). Вы можете применить SUM() к таким выражениям в запросе GROUP BY.

Попробуйте что-то вроде этого:

SELECT dep, 
     count(*) totalrows, 
     SUM(n_of_cust > n_of_employees) many_cust_rows, 
     SUM(n_of_cust = n_of_employees) equal_cust_rows 
    FROM My_table 
    GROUP BY dep 
+0

спасибо, я думаю, это то, что я искал! – GionJh

1

Вы должны использовать JOIN с той же таблицей. Нечто подобное:

 SELECT t1.dep, s1.quantity 
     FROM My_table AS t1 
    LEFT JOIN (SELECT dep,count(*) 
       FROM My_table 
       WHERE n_of_cust > n_of_employees 
      GROUP BY dep 
      ) AS s1 ON t1.dep = d1.dep 
+0

Спасибо за ваш ответ и работу по редактированию! – GionJh

Смежные вопросы