Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сумма определенной категории  [new]
halfpintboy
Member

Откуда:
Сообщений: 36
Здравствуйте. Мне нужно посчитать показатель отношения суммы заказов к количеству клиентов у которых такие заказы.

Условия выборки: человек совершил первую покупку в течение года и у него есть товары и определенной категории (BusinessId=9).

Я считал следующим образом:

SELECT

Sum(OrderDate.ItemSum)/Count(OrderDate.Clientid)

FROM OrderDate

join item on item.id=OrderDate.itemid

where OrderDate.firstclientorder between '2013-01-01' and '2014-01-01'
and item.businessid=9

Но теперь я сталкиваюсь с проблемой, когда мне нужно посчитать не общую сумму всех заказов ItemSum, а только сумму тех заказов которые были выполнены в категории (BusinessId=9). Как нужно переработать скрипт, чтобы сделать это?
19 янв 14, 15:05    [15436432]     Ответить | Цитировать Сообщить модератору
 Re: Сумма определенной категории  [new]
Добрый Э - Эх
Guest
прочитать про CASE и использовать полученные знания на практике.
19 янв 14, 15:43    [15436565]     Ответить | Цитировать Сообщить модератору
 Re: Сумма определенной категории  [new]
halfpintboy
Member

Откуда:
Сообщений: 36
Я применил Case и вероятно он не сработал, так как я получил тоже число что и в первом примере

/****** Script for SelectTopNRows command from SSMS ******/

SELECT

"LTV"=

Сase
when item.businessid=9 then Sum(OrderDate.TotalItemSum)/Count(OrderDate.Clientid)
END

FROM item


join OrderDate on item.itemid=OrderDate .id



where OrderDate .firstclientorder between '2013-01-01' and '2014-01-01'
and item.businessid=9

Group by item.businessid
19 янв 14, 16:04    [15436617]     Ответить | Цитировать Сообщить модератору
 Re: Сумма определенной категории  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 659
Если цель первого запроса - посчитать средний чек среди новых клиентов - то запрос условно верный.
Если же цель именно такая, которая описана в первом посте - то в запросе бага.

Клиент мог несколько раз приобретать товар из данной категории в течении года, и каждая такая покупка считаетсчя у вас как совершенная отдельным новым клиентом, что негативно сказывается на результате. Попробуйте запользовать DISTINCT

Условно верный: запрос выбирает только заказы с BusinessID = 9 и никак не учитывает другие категории товара, приобретаемые клеинтом. Опять же, может быть такова изначальная постановка задачи.

Попробуйте приджойнить все товары клиента, а не только с BusinessID = 9. Т.е. условия на BusinessID =9 - оно обязательное, но нужен еще один джойн - чтоб выбрать и все другие товары клиента. Хотя тут надо бы до конца понимать структуру ваших таблиц.

halfpintboy
Я применил Case и вероятно он не сработал, так как я получил тоже число что и в первом примере


Мое мнение - у вас первый запрос не верный. А второй-таки собирает нужные Вам данные, хотя и выглядит криво - Case там ни к чему. тем более в том виде, в котором он использован (стоит подумать в направлении убрать Case внутрь Sum) .
19 янв 14, 17:03    [15436716]     Ответить | Цитировать Сообщить модератору
 Re: Сумма определенной категории  [new]
Glory
Member

Откуда:
Сообщений: 104751
halfpintboy
Но теперь я сталкиваюсь с проблемой, когда мне нужно посчитать не общую сумму всех заказов ItemSum, а только сумму тех заказов которые были выполнены в категории (BusinessId=9). Как нужно переработать скрипт, чтобы сделать это?

разве ваше where item.businessid=9 не делает этого ?
19 янв 14, 17:07    [15436728]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить