Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом [SQL92]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо