Сгруппировать, чтобы включить регистр внутри оператора SQL - PullRequest
0 голосов
/ 20 марта 2020

У меня есть таблица, в которой хранится информация о покупках от продавцов, и таблица содержит рейтинг каждой покупки из 5 звезд. Я хочу, чтобы выводился список по группам продавцов и каждому продавцу: хорошие (выше 3) и плохие (ниже 4) рейтинги

PurchaseId  SellerId    PurchaseRating
1            ABC         2
2            ABC         5
3            DEF         1
4            XYZ         2
5            DEF         4
7            ABC         3

OUTPUT 
SellerId     TotalOrders   AvgRating    Above3*(4&5)  Below4*(1 to 3)
ABC           3             3.3        1              2
DEF           2             2.5        1              1
XYZ           1              2         0              1

Для первых 3 столбцов я получаю результат, используя это

Select SellerId, Count(P.Id) TotalOrders, Avg(PurchaseRating) AvgRating, 
CASE WHEN P.PurchaseRating >= 4 THEN 1 ELSE 0 END AS Above3*(4&5)
 from 
  [dbo].[AmazonAbeOrdersPurchaseInfo] P 
   Where PurchaseRating is not null
  Group by P.SellerId
  order by TotalOrders desc

Невозможно определить, как включить регистр в группу по выражению.

1 Ответ

1 голос
/ 20 марта 2020

Вы пытаетесь сделать условное нарастание. Важно то, что вам нужно условное выражение внутри агрегатной функции:

select 
    sellerId,
    count(*) totalOrders,
    avg(purchaseRating) avgRating,
    sum(case when purchaseRating > 3 then 1 else 0 end) above3,
    sum(case when purchaseRating < 4 then 1 else 0 end) below4
from [dbo].[AmazonAbeOrdersPurchaseInfo]
where purchaseRating is not null
group by sellerId
order by totalOrders desc
...