SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.05.2016 21:45:59

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Вывод поля таблицы, соответствующего min-параметру

Добрый день, у меня возникла небольшая алгоритмическая проблема в выборе данных.

Таблица insurance_contract содержит информацию о контрактах, у контакта есть свой агент, его зарегистрировавший.
Хотелось бы подсчитать, так сказать, самого свободного, на котором висит меньше всех контрактов агента.
Попробовал это реализовать этим запросом:

select Agent, min(mycount) from (select Agent, count(Agent) mycount from insurance_contract group by Agent order by mycount) as alias1


Вот результат этого запроса (какой агент, сколько на нём контрактов)
http://s8.hostingkartinok.com/uploads/images/2016/05/58dc272bcba5ab6704bca082faf6face.png

Но теперь я не знаю, как выбрать самого агента из этого запроса, чтобы потом в дальнейшем использовать. Помогите, пожалуйста, разобраться.

Неактивен

 

#2 13.05.2016 22:08:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывод поля таблицы, соответствующего min-параметру

Неактивен

 

#3 13.05.2016 22:18:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывод поля таблицы, соответствующего min-параметру

1. запрос у вас ошибочный:
select Agent, min(mycount) -- подразумевает, что вы делаете неявную группировку по mycount, т.е у вас будет выбрано минимальное значение mycount и случайное agent.

2. задача не точна - если самых свободных несколько, то нужны все или один из них?

Неактивен

 

#4 13.05.2016 22:33:46

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Re: Вывод поля таблицы, соответствующего min-параметру

vasya написал:

1. запрос у вас ошибочный:
select Agent, min(mycount) -- подразумевает, что вы делаете неявную группировку по mycount, т.е у вас будет выбрано минимальное значение mycount и случайное agent.

2. задача не точна - если самых свободных несколько, то нужны все или один из них?

Хм... я Вас понял в плане первого замечания, но как его можно было бы исправить?
Ну а насчёт второго, то нужен только один, любой.

Неактивен

 

#5 13.05.2016 22:57:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывод поля таблицы, соответствующего min-параметру

в вашем случае можно:

select Agent from insurance_contract group by Agent order by count(*) limit 1;

а вообще в статье есть несколько способов.

Неактивен

 

#6 13.05.2016 23:06:01

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Re: Вывод поля таблицы, соответствующего min-параметру

vasya написал:

в вашем случае можно:

select Agent from insurance_contract group by Agent order by count(*) limit 1;

а вообще в статье есть несколько способов.

А не могли бы Вы описать результаты работы этого запроса. Как он отбирает наименее "занятых"?

Неактивен

 

#7 13.05.2016 23:20:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывод поля таблицы, соответствующего min-параметру

order by count(*) limit 1 -- сортировать по кол-ву контрактов по возрастанию, оставить первую запись

Неактивен

 

#8 14.05.2016 08:45:35

Ovenvan
Завсегдатай
Зарегистрирован: 13.05.2016
Сообщений: 27

Re: Вывод поля таблицы, соответствующего min-параметру

Ага, я Вас понял, спасибо за объяснение и представленный вариант

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson