【发布时间】:2021-04-03 06:47:14
【问题描述】:
这是 'items' 表,包含超过 10 行:
+-----+-----------+-----------+----------+
| id | item_name | category | quantity |
+=====+===========+===========+==========+
| 3 | item33 | category1 | 5 |
+-----+-----------+-----------+----------+
| 2 | item52 | category5 | 1 |
+-----+-----------+-----------+----------+
| 1 | item46 | category1 | 3 |
+-----+-----------+-----------+----------+
| 4 | item11 | category3 | 2 |
+-----+-----------+-----------+----------+
| ... | ... | ... | ... |
+-----+-----------+-----------+----------+
“items”列中的值是唯一的,“category”列中的值不是唯一的。
任务是:
- 删除重复的类别:如果一个类别包含超过 1 个项目,则取“id”最小的行。
- 按“数量”(ASC) 对结果进行排序。
- 取 10 行:前 5 行,其余结果数据输出中随机 5 行。
所以,排序表(在#2 子任务之后)应该是这样的:
+-----+-----------+-----------+----------+
| id | item_name | category | quantity |
+=====+===========+===========+==========+
| 2 | item52 | category5 | 1 |
+-----+-----------+-----------+----------+
| 4 | item11 | category3 | 2 |
+-----+-----------+-----------+----------+
| 1 | item46 | category1 | 3 |
+-----+-----------+-----------+----------+
| ... | ... | ... | ... |
+-----+-----------+-----------+----------+
我知道如何排除类别的重复项:
SELECT min(id) as id, category
FROM items
GROUP BY category
但我不知道如何按数量订购。 如果我尝试将 'quantity' 添加到 'select' 行,然后进行 'ORDER BY quantity',我会收到错误:"column "quantity" 必须出现在 GROUP BY 子句中或用于聚合函数中".
如果有办法将此“数量”列添加到数据输出(该列中的值应与生成的“id”值相关(即“min(id)”))?然后进行排序和挑选行...
【问题讨论】:
标签: sql postgresql random greatest-n-per-group