首页 > 解决方案 > 查询以特定格式返回记录

问题描述

假设我有下表:

id  |  name   |  type
1   |  test1  |  value1
2   |  test2  |  value1
3   |  test3  |  value1
4   |  test4  |  value2
5   |  test5  |  value2
6   |  test6  |  value3

我如何编写查询以返回记录,但首先需要使用,

  1. 首先是 value1 类型的记录,然后是 value2,然后是 value3,依此类推..(每种类型 1 条记录)
  2. 再次记录 value1、value 2 等类型的记录,以保持与上述相同的方式......

标签: sqlruby-on-railsactiverecordsql-order-by

解决方案


如果您能够使用窗口函数,请使用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  |

推荐阅读