Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Туплю после отпуска. Помогите с SQL запросом   Найти похожие ветки 

 
novill ©   (2007-08-29 11:15) [0]

Сервер mssql2000.

Таблица id_zakaz, id_client, id_company, summa

Надо определить в какой компании каждый клиент сделал заказов на наибольшую сумму.
Вывести id_client, id_company, summa

Сбор сумм заказов по клиенту и фирме:

select id_client, id_company, sum(summa) as summa
from zakaz
group by id_client, id_company


Теперь надо отфильтровать, чтобы на каждого клиента осталась только одна фирма, у которой он заказал больше всего. Как это сделать, никак не соображу(((


 
cvg   (2007-08-29 11:21) [1]

А что, MAX(summa) не идет?


 
cvg   (2007-08-29 11:24) [2]

что-нить типа:

select id_client? id_company, max(summa) as max
from zakaz
group by id_client, id_company


 
cvg   (2007-08-29 11:26) [3]

в первой строчке не "?", конечно, а запятая


 
Sergey13 ©   (2007-08-29 11:31) [4]

> [0] novill ©   (29.08.07 11:15)

А так не пройдет?

select id_client, id_company,max(summa) as summa from
(select id_client, id_company,sum(summa) as summa  from zakaz
group by id_client, id_company)
group by id_client, id_company


 
Игорь Шевченко ©   (2007-08-29 11:31) [5]


>  id_zakaz, id_client, id_company,


а почему не id_zakaz, id_klient, id_kompaniya ?


 
novill ©   (2007-08-29 11:32) [6]

> [1] cvg   (29.08.07 11:21)

Вот такой запрос

select id_client, max(summa) as summa
from
(
select id_client, id_company, sum(summa) as summa
from zakaz
group by id_client, id_company
) q
group by id_client

Выведет нужные суммы и клиента, но вывести компанию им нельзя, т.к. ее придется вставлять в выражение group by, а это сделает запрос бессмысленным. Как компанию вывести?


 
cvg   (2007-08-29 11:38) [7]

А зачем все пихать в один запрос, если проще разбить на два? Первый -- который автор уазал, второй -- в моем парвом ответе.


 
cvg   (2007-08-29 11:39) [8]

Хотя, конечно, для этого временная таблица нужна, что не очень удобно...


 
novill ©   (2007-08-29 11:39) [9]

> [7] cvg   (29.08.07 11:38)

Потому что одним запросом надо.


 
clickmaker ©   (2007-08-29 11:43) [10]


> Надо определить в какой компании каждый клиент сделал заказов
> на наибольшую сумму

то есть?
если каждый клиент, то каким боком на наибольшую сумму?


 
novill ©   (2007-08-29 11:50) [11]

> [10] clickmaker ©   (29.08.07 11:43)

Один клиент делает заказы в разных фирмах.
Надо узнать в какой фирме он заказал на наибольшую сумму.
И так для каждого клиента.


 
clickmaker ©   (2007-08-29 11:54) [12]


> в какой фирме он заказал на наибольшую сумму

select company_id
from zakaz
where id_client = <id>
and summa = (select max(summa) from zakaz where id_client = <id>)

так, что-ли?


 
beg   (2007-08-30 10:51) [13]

select t2.id_client,
     (select top 1 q.id_company
     from
         (
         select t.id_company, sum(t.summa) as summa
         from zakaz t
         where t.id_client = t2.id_client
         group by t.id_company
         ) q
     order by q.summa desc
     )
from zakaz t2    
такое в MSSQL200 пройдет?


 
Кщд ©   (2007-08-30 11:00) [14]

или эдак:

         select t.id_client, t.id_company, sum(t.summa) as summa
         from zakaz t
         group by t.id_client, t.id_company
         having sum(t.summa) = (select max(t3.summa)
                               from
                                    (select sum(t.summa) as summa
                                     from zakaz t2
                                     where t.id_client = t2.id_client
                                     group by t.id_company
                                    ) t3
                                )


 
Кщд ©   (2007-08-30 11:05) [15]

или перейти на аналитику mssql2005:

select t3.id_client, t3.id_company, t3.summa
from
     (select t2.id_client, t2.id_company, t2.summa,
                row_number() over (partition by t2.id_client order by t2.summa desc) rn
     from
           (select t.id_client, t.id_company, sum(t.summa) summa
           from zakaz t
           group by t.id_client, t.id_company
           ) t2
     ) t3
where t3.rn = 1



 
ЮЮ ©   (2007-08-31 09:35) [16]

> [6] novill ©   (29.08.07 11:32)

select id_client, max(summa) as summa
from
(
 select id_client, id_company, sum(summa) as summa
 from zakaz
 group by id_client, id_company
) q
group by id_client

> Выведет нужные суммы и клиента, но вывести компанию им нельзя,
>


ещё раз соединить с внутренним запросом, но теперь по summ:

Select cl.id_client, cl.summa, comp.id_client  
FROM
 (
   select id_client, max(summa) as summa
   from (
     select id_client, id_company, sum(summa) as summa
     from zakaz
     group by id_client, id_company
   ) q
   group by id_client
 ) cl
 JOIN
  (
     select id_client, id_company, sum(summa) as summa
     from zakaz
     group by id_client, id_company
   ) comp ON cl.Summa = comp.Summa and cl.id_client = comp.id_client


 
novill ©   (2007-09-03 11:00) [17]

Да, это - то, что нужно было
Спасибо всем.



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
15-1188700763
NEW3
2007-09-02 06:39
2007.09.30
IDA Pro 4 3 Ищу какие-нибудь справочники литературу статьи по ней


2-1188935109
max_
2007-09-04 23:45
2007.09.30
мышь


15-1188374949
schaps
2007-08-29 12:09
2007.09.30
Может есть у кого FastReport 2.45 ( открывает frf)


15-1188443679
vajo
2007-08-30 07:14
2007.09.30
Какую Висту брать в контору?


2-1188545064
_Iv_
2007-08-31 11:24
2007.09.30
Массив и ресурсы(*.res)