Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите сделать запрос в mysql

Ночные крылья Ученик (106), на голосовании 3 года назад
Написать запрос, который выводит кол-во различных ролей для каждого из проектов (должны выводиться названия проектов). Результаты должны быть отсортированы по возрастанию количества различных ролей. Есть таблица проекты (имя_проекта, ид_проекта) и таблица работники (ид_работника, ид_проекта, роль)
Голосование за лучший ответ
Оракул Оракул (62089) 3 года назад
селект п. имя_проекта, каунт (дистинкт р. роль) фром проекты п
джойн работники р он р. ид_проекта = п. ид_проекта
груп бай п. имя_проекта
ордер бай каунт (дистинкт р. роль)
ИПМудрец (10996) 3 года назад
order by неправильно
ИП Мудрец (10996) оно посчитает разве что количество уникальных ролей
ИПМудрец (10996) 3 года назад
в твоём варианте получится только число, например 50, как по одному числу сортировать?
ИП Мудрец (10996) 3 года назад
в ордер бай нужно так :count(distinct r. role), r. role
ОракулОракул (62089) 3 года назад
Сортировать по именам ролей в задании нет. Только по возрастанию числа.
Black Afgano Просветленный (22302) 3 года назад
SELECT project_name, r.roles_count
  FROM projects AS p
  JOIN
   (
     SELECT project_id, COUNT (DISTINCT role) AS roles_count
       FROM employees
       GROUP BY project_id
    ) r ON p.project_id = r.project_id
  ORDER BY 2;

Или ещё вот так

SELECT p.project_name, COUNT (DISTINCT role) AS roles_count
  FROM employees as r
  GROUP BY project_id
  JOIN projects p
   ON r.project_id = p.project_id
  ORDER BY 2;
Ночные крыльяУченик (106) 3 года назад
Пишет, что колонка project_id in field list
Ночные крыльяУченик (106) 3 года назад
Все, разобрался. Спасибо большое)
Похожие вопросы