Как составить запрос с COUNT в mysql

Узнай цену своей работы

Формулировка задачи:

Всем привет. Есть две таблицы менеджеры и заказы Структура таблицы manager
Листинг программы
  1. CREATE TABLE `manager` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `first_name` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
  4. `last_name` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
  5. `email` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
  6. `chief_id` INT(11) DEFAULT NULL,
  7. PRIMARY KEY (`id`),
  8. KEY `chief_id` (`chief_id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Структура таблицы claim
Листинг программы
  1. CREATE TABLE `claim` (
  2. `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `manager_id` INT(11) NOT NULL,
  4. `created_at` datetime NOT NULL,
  5. `sum` FLOAT NOT NULL,
  6. PRIMARY KEY (`id`),
  7. KEY `manager_id` (`manager_id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
Ограничения внешнего ключа таблицы claim
Листинг программы
  1. ALTER TABLE `claim`
  2. ADD CONSTRAINT `claim_ibfk_1` FOREIGN KEY (`manager_id`)
  3. REFERENCES `manager` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Ограничения внешнего ключа таблицы manager
Листинг программы
  1. ALTER TABLE `manager`
  2. ADD CONSTRAINT `manager_ibfk_1` FOREIGN KEY (`chief_id`)
  3. REFERENCES `manager` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;
Помогите пожалуйста выбрать менеджеров, у которых количество заказов больше, чем у их руководителя. Не могу никак выбрать. Самый близкий вариант такой
Листинг программы
  1. SELECT a.first_name, b.first_name, COUNT( a.first_name ) , COUNT( b.first_name )
  2. FROM manager a, manager b, `claim`
  3. WHERE a.id = b.chief_id AND a.id = claim.manager_id
  4. GROUP BY a.first_name
Но куда впихнуть условие где count одного > count другого, ума не приложу. Если в WHERE ставлю
Листинг программы
  1. AND COUNT( a.first_name ) > COUNT( b.first_name )
получаю ошибку

Invalid use of group function

если ставлю в having
Листинг программы
  1. SELECT a.first_name, b.first_name, COUNT( a.first_name ), COUNT( b.first_name )
  2. FROM manager a, manager b, claim WHERE a.id = b.chief_id
  3. AND a.id = claim.manager_id GROUP BY a.first_name
  4. HAVING COUNT( a.first_name ) > COUNT( b.first_name )
то ответ пустой получается.

Решение задачи: «Как составить запрос с COUNT в mysql»

textual
Листинг программы
  1. ;WITH cte AS (
  2. SELECT  m.chief_id, m.id AS manager_id, COUNT(*) AS CNT
  3. FROM manager m
  4. JOIN claim c ON m.id = c.manager_id
  5. GROUP BY
  6.  m.chief_id, m.manager_id
  7. )
  8. SELECT managerCTE.manager_id
  9. FROM cte managerCTE
  10. LEFT JOIN cte chiefCTE ON managerCTE.chief_id = chiefCTE.manager_id
  11. WHERE managerCTE.CNT > isnull(chiefCTE.CNT)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут