У меня есть таблица, которая выглядит следующим образом:
+------+------+------------------+
| item | val | timestamp |
+------+------+------------------+
| 1 | 3.66 | 16-05-2011 09:17 |
| 1 | 2.56 | 16-05-2011 09:47 |
| 2 | 4.23 | 16-05-2011 09:37 |
| 3 | 6.89 | 16-05-2011 11:26 |
| 3 | 1.12 | 16-05-2011 12:11 |
| 3 | 4.56 | 16-05-2011 13:23 |
| 4 | 1.10 | 16-05-2011 14:11 |
| 4 | 9.79 | 16-05-2011 14:23 |
| 5 | 1.58 | 16-05-2011 15:27 |
| 5 | 0.80 | 16-05-2011 15:29 |
| 6 | 3.80 | 16-05-2011 15:29 |
+------+------+------------------+
итого, общая сумма всех предметов за день: 16 мая 2011 равна: 40.09
Теперь я хочу получить , какие элементы этого списка составляют 80% от общей суммы. Позвольте мне привести пример:
- Общая сумма: 40,09
- 80% от общей суммы: 32,07
, начиная с предмета с большим процентным весом по отношению к итогусумма, которую я хочу получить сгруппированный список элемента, который составляет 80% от общей суммы:
+------+------+
| item | val |
+------+------+
| 3 | 12.57|
| 4 | 10.89|
| 1 | 6.22|
+------+------+
Как вы можете видеть, элементы в наборе результатов - это элементы, сгруппированные по коду элемента и упорядоченные изэлемент с большим процентным весом к общему итогу по убыванию до достижения порогового значения 80%.
Начиная с пункта 2 элементы отбрасываются из результирующего набора, поскольку они превышают пороговое значение 80%, поскольку:
12.57 + 10.89 + 6.22 + 4.23 > 32.07 (80 % of the grand total )
Это не домашняя работа, это реl контекст, в котором я оступился и мне нужно достичь результата одним запросом ...
Запрос должен выполняться без изменений или с небольшими изменениями в MySQL, SQL Server, PostgreSQL.