PostgreSQL: верхние n записей на элемент в одной таблице
| uId | title | amount | makers | widgets |
1 richard 998 xcorp sprocket
2 swiss 995 ycorp framitz
3 ricky 90 zcorp flobber
4 ricky2 798 xcorp framitz
1 lilrick 390 xcorp sprocket
1 brie 200 mcorp gullywok
1 richard 190 rcorp flumitz
1 brie 490 bcorp sprocket
и т.д...
Я пытаюсь получить только 3 записи вmakers
топ 3amounts
иwidgets
они произвели
Вот что у меня есть:
SELECT amount, makers FROM (SELECT amount, makers, (SELECT count(*) FROM entry as t2
WHERE t2.amount = t1.amount and t2.makers >= t1.makers) AS RowNum
FROM entry as t1
) t3
WHERE t3.RowNum<4 order by amount;
Это возвращает то, что мне действительно нужно? Есть ли лучший способ сделать это? Большинство способов, которые я видел, чтобы делать такие вещи, - это объединение и т. Д. На разных таблицах, вся необходимая информация находится на одном столе.
Ожидаемый результат:
| uId | title | amounts | makers | widgets |
1 richard 998 xcorp sprocket
41 swiss 995 xcorp widget
989 richard 989 xcorp sprocket
22 swiss 995 ycorp framitz
92 swiss 990 ycorp widget
456 swiss 895 ycorp flobber
344 ricky 490 zcorp flobber
32 tricky 480 zcorp flobber
13 ricky 470 zcorp flobber
и т.д...
Порядокmakers
не так важно, как получить топ 3amounts
для каждогоmakers
иwidgets
они предоставили. Номерmakers
установлен, всегда будетx
makers