![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом [SQL92]
Romkin © (2003-04-29 10:40:00)Давно уже пишу хранимые процедуры, запросы простые, а тут наткнулся на задачу, и застрял:
Есть таблица вида (ClientID, OrderID) - думаю, понятно, клиенты и документы.
Вывести запросом ClientID - номер клиента(тов!), которые выписали максимальное количестводокументов.
Например:
ClientID OrderID
1 23
1 46
5 62
5 48
5 81
24 46
34 89
34 13
Должно выдать 5
О выдаче количества речь не идет, нужен номер.
Проблема в том, что сделать нужно одним запросом на основе стандарта. Напоминаю: select top ... нет (и не подходит)
select from select нет, select max(count) - вложенные агрегатные функции недопустимы.
Вопрос: Можно ли написать подобный запрос, один, без использования view?
Соловьев (2003-04-29 11:07:00) [21]тогда так...
Select ClientID, count(ClientID) as CntCli From Table
Group by ClientID
Order by CntCli desc
и взять первую запись...
Соловьев (2003-04-29 11:05:00) [22]вот блин, читать надо было внимательно вопрос... сорри я подумал что OrderId это количество... сорри еще раз...
KoluChi (2003-04-29 11:04:00) [23]
> Соловьев © (29.04.03 11:01)
sum(OrderID) - получим что-то страшное :)
Romkin (2003-04-29 11:03:00) [24]Суммировать OrderID?! И что получится?
Соловьев (2003-04-29 11:01:00) [25]забыл :)))
Select ClientID, sum(OrderID) as SumOrdFrom Table
Group by ClientID
Order by SumOrddesc
Romkin (2003-04-29 11:01:00) [26]А если group by & having добавить? во where & having подзапросы писать же можно...
top, кстати, в любом случае не подойдет - а если есть два ClientID с одинаковым максимальным количеством?
Соловьев (2003-04-29 11:01:00) [27]
Select ClientID, sum(OrderID) From Table
Group by ClientID
Order by ClientID desc
и взять первую запись
KoluChi (2003-04-29 10:58:00) [28]Пойдем логическим путем:
1) нужно вернуть 1 значение - сделать это можно только агр. функцией (max, count) в данном случае нужен max.
2) Максимум нужно искать из количества документов - количество документов - count(OrderID) для конкретного ClientID
3) Порядок сортировки не поможет (top тоже нет)
4) WHERE не знаю куда вставить
Получаем запрос с 2 вложенными группировками, если у нас нет SELECT FROM SELECT и MAX(COUNT), imho, одним запросом не обойтись.
Romkin (2003-04-29 10:54:00) [29]Говорю же - вложенные агрегаты недомустимы!
KoluChi (2003-04-29 10:53:00) [30]Мой вариант не проходит, нужно было внимательнее прочитать вопрос :)
Соловьев (2003-04-29 10:46:00) [31]
> KoluChi © (29.04.03 10:43)
> Select Max(Count(ClientID)) From Table
> Group by ClientID
а поле ClientID не надо разве в SELECT?
KoluChi (2003-04-29 10:46:00) [32]не то немного, сейчас соображу ... (может быть)
KoluChi (2003-04-29 10:43:00) [33]Select Max(Count(ClientID)) From Table
Group by ClientID