![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Туплю после отпуска. Помогите с SQL запросом
novill © (2007-08-29 11:15:00)Сервер 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
Теперь надо отфильтровать, чтобы на каждого клиента осталась только одна фирма, у которой он заказал больше всего. Как это сделать, никак не соображу(((
novill (2007-09-03 11:00:00) [1]Да, это - то, что нужно было
Спасибо всем.
ЮЮ (2007-08-31 09:35:00) [2]> [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
Кщд (2007-08-30 11:05:00) [3]или перейти на аналитику 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-30 11:00:00) [4]или эдак:
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
)
beg (2007-08-30 10:51:00) [5]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 пройдет?
clickmaker (2007-08-29 11:54:00) [6]
> в какой фирме он заказал на наибольшую сумму
select company_id
from zakaz
where id_client = <id>
and summa = (select max(summa) from zakaz where id_client = <id>)
так, что-ли?
novill (2007-08-29 11:50:00) [7]> [10] clickmaker © (29.08.07 11:43)
Один клиент делает заказы в разных фирмах.
Надо узнать в какой фирме он заказал на наибольшую сумму.
И так для каждого клиента.
clickmaker (2007-08-29 11:43:00) [8]
> Надо определить в какой компании каждый клиент сделал заказов
> на наибольшую сумму
то есть?
если каждыйклиент, то каким боком на наибольшуюсумму?
novill (2007-08-29 11:39:00) [9]> [7] cvg (29.08.07 11:38)
Потому что одним запросом надо.
cvg (2007-08-29 11:39:00) [10]Хотя, конечно, для этого временная таблица нужна, что не очень удобно...
cvg (2007-08-29 11:38:00) [11]А зачем все пихать в один запрос, если проще разбить на два? Первый -- который автор уазал, второй -- в моем парвом ответе.
novill (2007-08-29 11:32:00) [12]> [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, а это сделает запрос бессмысленным. Как компанию вывести?
Игорь Шевченко (2007-08-29 11:31:00) [13]
> id_zakaz, id_client, id_company,
а почему не id_zakaz, id_klient, id_kompaniya ?
Sergey13 (2007-08-29 11:31:00) [14]> [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
cvg (2007-08-29 11:26:00) [15]в первой строчке не "?", конечно, а запятая
cvg (2007-08-29 11:24:00) [16]что-нить типа:
select id_client? id_company, max(summa) as max
from zakaz
group by id_client, id_company
cvg (2007-08-29 11:21:00) [17]А что, MAX(summa) не идет?