Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
прочитать про CASE и использовать полученные знания на практике. |
19 янв 14, 15:43 [15436565] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Mikle83 Member Откуда: Санкт-Петербург Сообщений: 653 |
Если цель первого запроса - посчитать средний чек среди новых клиентов - то запрос условно верный. Если же цель именно такая, которая описана в первом посте - то в запросе бага. Клиент мог несколько раз приобретать товар из данной категории в течении года, и каждая такая покупка считаетсчя у вас как совершенная отдельным новым клиентом, что негативно сказывается на результате. Попробуйте запользовать DISTINCT Условно верный: запрос выбирает только заказы с BusinessID = 9 и никак не учитывает другие категории товара, приобретаемые клеинтом. Опять же, может быть такова изначальная постановка задачи. Попробуйте приджойнить все товары клиента, а не только с BusinessID = 9. Т.е. условия на BusinessID =9 - оно обязательное, но нужен еще один джойн - чтоб выбрать и все другие товары клиента. Хотя тут надо бы до конца понимать структуру ваших таблиц.
Мое мнение - у вас первый запрос не верный. А второй-таки собирает нужные Вам данные, хотя и выглядит криво - Case там ни к чему. тем более в том виде, в котором он использован (стоит подумать в направлении убрать Case внутрь Sum) . |
||
19 янв 14, 17:03 [15436716] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
разве ваше where item.businessid=9 не делает этого ? |
||
19 янв 14, 17:07 [15436728] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |