Próbuję stworzyć zapytanie do x ludzi, którzy stworzyli liczne zamówienia, aby zapewnić histogram. Również każdy z> 10 zamówień powinien zostać zgrupowany w "10+" wiadro. Nie wiem, jak pisać liczenie z instrukcją sprawy w nim.

Tabela Orders ma dwie kolumny:

orderid  int
customerid nchar(5)
-2
klajdiziaj930 16 kwiecień 2021, 20:19

2 odpowiedzi

Najlepsza odpowiedź

Szukasz dwóch poziomów agregacji, przy użyciu kluczy warunkowych w drugim:

select (case when cnt < 10 then cnt else 10 end), sum(cnt)
from (select customerid, count(*) as cnt
      from orders
      group by customerid
     ) c
group by (case when cnt < 10 then cnt else 10 end)

Dotyczy to 10 lub więcej do wiadra 10.

1
Gordon Linoff 16 kwiecień 2021, 17:59

Jeśli poprawnie rozumiem twoje pytanie (y jest liczbą osób, które umieszczają x zamówienia, gdzie 1 <= x <= 10 lub 10+), powinno to dać ci, co chcesz. X = 11 to 10+ wiadro.

With Qry1 As (
    select customerid, count(*) as order_count
    from orders
    group by customerid
), Qry2 As (
    select customerid, 
    case order_count <= 10 then order_count else 11 end as order_count
    from Qry1
)
select order_count As X, count(*) As Y
from Qry2
group by order_count
0
Nicholas Hunter 16 kwiecień 2021, 18:24