Форум: "Начинающим";
Текущий архив: 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