sql - 查询以特定格式返回记录
问题描述
假设我有下表:
id | name | type
1 | test1 | value1
2 | test2 | value1
3 | test3 | value1
4 | test4 | value2
5 | test5 | value2
6 | test6 | value3
我如何编写查询以返回记录,但首先需要使用,
- 首先是 value1 类型的记录,然后是 value2,然后是 value3,依此类推..(每种类型 1 条记录)
- 再次记录 value1、value 2 等类型的记录,以保持与上述相同的方式......
解决方案
如果您能够使用窗口函数,请使用ROW_NUMBER() OVER (PARTITION BY type)
. 它将为每种类型分配行号:
TableName.find_by_sql(
select *, row_number() over (partition by type order by (select null)) rn
from table_name
order by rn, type
)
输出:
| id | name | type | rn |
|----|-------|--------|----|
| 1 | test1 | value1 | 1 |
| 4 | test4 | value2 | 1 |
| 6 | test6 | value3 | 1 |
| 2 | test2 | value1 | 2 |
| 5 | test5 | value2 | 2 |
| 3 | test3 | value1 | 3 |