2015-09-02 3 views
0

У меня есть пользовательская таблица ldap_karen, в которой есть все данные о сотрудниках, включая sup_id (id супервизора) и роль работы сотрудника.Почему мой запрос mysql для получения «большинства» данных запускается вечно?

У меня также есть таблица супервизора, которая имеет все уникальные sup_ids.

В настоящее время у меня есть:

SELECT 
ldap_sups.sup_id, 
COUNT(ldap_karen.uid) as team_nums, 
COUNT(sa_title) as title_nums, 
(SELECT sa_title 
FROM ldap_karen 
WHERE ldap_sups.sup_id=ldap_karen.sup_id 
group by sa_title 
order by count(ldap_karen.sa_title) desc 
limit 1) as sup_role, 
ldap_karen.sa_title, 
ldap_karen.regionname 
FROM 
ldap_sups 
JOIN ldap_karen ON ldap_sups.sup_id = ldap_karen.sup_id 
GROUP BY sup_id 

Так что это дает мне супервизора ID, то количество членов команды, количество должностей (не все сотрудники имеют названия работы), sup_role - это то, что не работает , sa_title (который просто отображает название должности последнего человека в списке) и региона.

Я бы хотел, чтобы sup_role отображал «самую» должность. Таким образом, независимо от того, какие должности лучше всего подходят для сотрудника под надзором, это sup_role.

Примечание: В настоящее время мой запрос выполняется только из-за проблемы с запросом «sup_role». Ничего не выйдет.

+0

Это кажется, что он должен работать. Не могли бы вы объяснить, что происходит? Вы получили сообщение об ошибке? Кроме того, может быть, что 'WHERE ldap_sups.sup_id = ldap_karen.thomssupervisorid' должно быть' WHERE ldap_sups.sup_id = ldap_karen.sup_id'? –

+0

@TeddyOrt - это просто работает ... никогда ничего не выводит. И да, это была ошибка редактирования моего вопроса. – blankip

ответ

0

Это должно работать, но это не самый лучший способ:

SELECT 
    ldap_sups.sup_id, 
    COUNT(ldap_karen.uid) as team_nums, 
    COUNT(ldap_karen.sa_title) as title_nums, 
    sums_title.sa_title as sup_role, 
    ldap_karen.sa_title, 
    ldap_karen.regionname 
FROM 
    ldap_sups 
    JOIN ldap_karen ON ldap_sups.sup_id = ldap_karen.sup_id 
    LEFT JOIN ( 
      SELECT sup_id, max(sum), sa_title from 
       (SELECT sup_id, count(sa_title) as sum, sa_title 
       FROM ldap_karen 
       group by sa_title,sup_id) supsup 
      group by sup_id 
     ) as sums_title on sums_title.sup_id = ldap_sups.sup_id 
GROUP BY sup_id 
+0

Это также просто работает .... – blankip

+0

У вас есть выход? Я доказал это, и все было хорошо. –

+0

Он никогда не выводит. У меня 80K сотрудников так интересно, если это размер файла или что-то. – blankip

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