Найти лучших пользователей, которые накапливают 75% всех баллов - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь найти лучших пользователей, у которых в совокупности набрано 75% всех баллов.

Таблица:

enter image description here

В этом списке пользователей должен быть результат: пользователи (Дик, Мэри, Джек и Сэм).

Я пытаюсь с (Oracle select ..)

SELECT o.users, SUM (o.points)
  FROM (SELECT users,
               SUM (points),
               RANK () OVER (ORDER BY SUM (points) DESC) r
          FROM points_tbl) o;

-> ошибка:

ORA-00904: "o". "Points": неверный идентификатор

1 Ответ

0 голосов
/ 21 мая 2018

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE points ( "user", points ) AS
SELECT 'joe',  10 FROM DUAL UNION ALL
SELECT 'bill', 15 FROM DUAL UNION ALL
SELECT 'dick', 25 FROM DUAL UNION ALL
SELECT 'jack', 32 FROM DUAL UNION ALL
SELECT 'mary', 45 FROM DUAL UNION ALL
SELECT 'noe',  12 FROM DUAL UNION ALL
SELECT 'sam',  18 FROM DUAL;

Запрос 1 :

SELECT "user", points
FROM   (
  SELECT p.*,
         COALESCE( 
           SUM( points ) OVER (
             ORDER BY points DESC
             ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
           ),
           0
         ) / SUM( points ) OVER () AS pct
  FROM   points p
  ORDER BY points DESC
)
WHERE pct < .75

Результаты :

| user | POINTS |
|------|--------|
| mary |     45 |
| jack |     32 |
| dick |     25 |
|  sam |     18 |
...