Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

Туплю после отпуска. Помогите с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
1-1184932927
Ice-T
2007-07-20 16:02
2007.09.30
Приложение и его главное окно - странный эффект


15-1188536993
boriskb
2007-08-31 09:09
2007.09.30
почему все же гудят высоковольтные провода и многое другое


2-1188842426
Dmitriy_
2007-09-03 22:00
2007.09.30
Как узнать имена всех объектов на форме? Плиз! очень нужно!


6-1169741565
Pasha L
2007-01-25 19:12
2007.09.30
послать POST-запрос с помощью TidHTTP и не дожидаться ответа


8-1166775174
Cawa
2006-12-22 11:12
2007.09.30
Воспроизведение avi mpg mp3 из закриптованого файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский