Создание запроса для возврата записей в определенном формате - PullRequest
0 голосов
/ 28 февраля 2019

Допустим, у меня есть следующая таблица:

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 и т. д. для сохранения того же самого вышеуказанного способа ...

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если вы можете использовать оконные функции, тогда используйте 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  |
0 голосов
/ 28 февраля 2019

Если я правильно понял, вам нужен запрос, подобный следующему.

SELECT t.name, 
       t1.type 
FROM   (SELECT DISTINCT name 
        FROM   yourtable) t 
       CROSS JOIN (SELECT DISTINCT type 
                   FROM   yourtable)t1 
...