Как составить запрос с COUNT в mysql
Формулировка задачи:
Всем привет. Есть две таблицы менеджеры и заказы
Структура таблицы manager
Структура таблицы claim
Ограничения внешнего ключа таблицы claim
Ограничения внешнего ключа таблицы manager
Помогите пожалуйста выбрать менеджеров, у которых количество заказов больше, чем у их руководителя. Не могу никак выбрать. Самый близкий вариант такой
Но куда впихнуть условие где count одного > count другого, ума не приложу. Если в WHERE ставлю
получаю ошибку
то ответ пустой получается.
Листинг программы
- CREATE TABLE `manager` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `first_name` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
- `last_name` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
- `email` VARCHAR(32) CHARACTER SET latin1 NOT NULL,
- `chief_id` INT(11) DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `chief_id` (`chief_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Листинг программы
- CREATE TABLE `claim` (
- `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
- `manager_id` INT(11) NOT NULL,
- `created_at` datetime NOT NULL,
- `sum` FLOAT NOT NULL,
- PRIMARY KEY (`id`),
- KEY `manager_id` (`manager_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
Листинг программы
- ALTER TABLE `claim`
- ADD CONSTRAINT `claim_ibfk_1` FOREIGN KEY (`manager_id`)
- REFERENCES `manager` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Листинг программы
- ALTER TABLE `manager`
- ADD CONSTRAINT `manager_ibfk_1` FOREIGN KEY (`chief_id`)
- REFERENCES `manager` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;
Листинг программы
- SELECT a.first_name, b.first_name, COUNT( a.first_name ) , COUNT( b.first_name )
- FROM manager a, manager b, `claim`
- WHERE a.id = b.chief_id AND a.id = claim.manager_id
- GROUP BY a.first_name
Листинг программы
- AND COUNT( a.first_name ) > COUNT( b.first_name )
Invalid use of group function
если ставлю в having
Листинг программы
- SELECT a.first_name, b.first_name, COUNT( a.first_name ), COUNT( b.first_name )
- FROM manager a, manager b, claim WHERE a.id = b.chief_id
- AND a.id = claim.manager_id GROUP BY a.first_name
- HAVING COUNT( a.first_name ) > COUNT( b.first_name )
Решение задачи: «Как составить запрос с COUNT в mysql»
textual
Листинг программы
- ;WITH cte AS (
- SELECT m.chief_id, m.id AS manager_id, COUNT(*) AS CNT
- FROM manager m
- JOIN claim c ON m.id = c.manager_id
- GROUP BY
- m.chief_id, m.manager_id
- )
- SELECT managerCTE.manager_id
- FROM cte managerCTE
- LEFT JOIN cte chiefCTE ON managerCTE.chief_id = chiefCTE.manager_id
- WHERE managerCTE.CNT > isnull(chiefCTE.CNT)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д