PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgre:Подреждане по низова колона с известни стойности

1.Ако просто ви трябва sql в postgres, ето го:

select * from events
order by (case state 
          when 'scheduled' then 1
          when 'notified' then 2
          when 'invited' then 3
          when 'started' then 4
          when 'ended' then 5 
          end)    

можете да промените реда на състоянията в sql, няма нужда да променяте ruby ​​кода, пуснете sql fiddle:http://sqlfiddle.com/#!12/976e9/3 .

2. В предложението на mu можете да използвате тип enum, това е по-ефективно, ако трябва да промените реда, можете да пресъздадете enum. вижте тази sql цигулка:http://sqlfiddle.com/#!12/f6f3d/2

CREATE TYPE states AS ENUM ('invited', 'scheduled', 'notified', 'started', 'ended');
create table events(
  name varchar(100),
  state states
);

select * from events order by state;

3. По чист рубинен начин можете да дефинирате хеш:

test_hash = {'scheduled'=>1, 'notified'=>2, 'invited'=>3, 'started'=>4, 'ended'=>5}
Events.all.sort! {|x, y| test_hash[x.state] <=> test_hash[y.state]}

4. Но според мен трябва да добавите таблица с име "състояния", с колони "име" и "последователност" и да посочите реда в "последователност". Тогава се присъединете към "събитията" и "състоянията". Когато промените поръчката, не е необходимо да променяте кода.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Няма налично буферно пространство (достигната е максимална връзка?) Формуляр Postgres EDB драйвер

  2. Как да преместя pandas DataFrame в PostgreSQL таблица?

  3. PostgreSQL:Как да предавам параметри от командния ред?

  4. Как да избегнем PostgreSQL Cloud Vendor Lock-in

  5. не може да извлича елементи от скалар