Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wybrać TOP 5 PROCENT z każdej grupy?

Możesz użyć CTE (Common Table Expression) w połączeniu z NTILE funkcja okienkowania - podzieli twoje dane na tyle wycinków, ile potrzebujesz, np. w twoim przypadku na 20 plasterków (każdy 5%).

;WITH SlicedData AS
(
   SELECT Category, Name, COUNT(Name) Total,
            NTILE(20) OVER(PARTITION BY Category ORDER BY COUNT(Name) DESC) AS  'NTile'
   FROM #TEMP
   GROUP BY Category, Name
)
SELECT *
FROM SlicedData
WHERE NTile > 1

To zasadniczo grupuje twoje dane według Category,Name , zamówienia według czegoś innego (nie jestem pewien, czy COUNT(Name) jest naprawdę tym, czego chcesz tutaj), a następnie dzieli go na 20 części, z których każda reprezentuje 5% partycji danych. Wycinek z NTile = 1 to górna część 5% - po prostu zignoruj ​​to, wybierając z CTE.

Zobacz:

po więcej informacji



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać liczbę dni weekendowych z zakresu dat?

  2. CHECKSUM i CHECKSUM_AGG:Jaki jest algorytm?

  3. Sprawdź, czy data nakłada się w SQL

  4. Jak dowiedzieć się, co blokuje moje stoły?

  5. Tabela temp serwera SQL a zmienna tabeli