sql - 按数据库中的字符串名称排序

标签 sql ruby-on-rails ruby postgresql

我将字符串变量存储在数据库中,可以是“弃权”、“阻止”、“否”或"is"。目前,我正在使用 ORDER BY position 来获取这些信息,但是,我不想按字母顺序排列,而是像这样排列它们:'Block'、'No'、'Abstain'、'Yes'。在 Rails 中有一种简单的方法可以做到这一点吗?

我的确切代码是:

def self.unique_votes(motion)
  Vote.find_by_sql("SELECT * FROM votes a WHERE created_at = (SELECT MAX(created_at) as created_at FROM votes b WHERE a.user_id = b.user_id AND motion_id = #{motion.id}) ORDER BY a.position")
end

注意:我正在使用 Postgres SQL,正在寻找可以在 select 语句中使用的解决方案谢谢!

最佳答案

这是实现此目的的方法之一。顺便说一句,做这样的事情的最好方法是有另一个名为 "Position" 的表,它通过一个数字和一个外键在 "votes" 中标识每个值> 表引用 "Position" 表的主键。您还可以在 "Position" 表中有另一个名为 "Order" 的列来存储这些数字并进行排序。您应该在插入时执行这些操作,而不是在每次选择时执行。

干杯

SELECT  *
,   Case    a.position
        When    'Block'     Then    0
        When    'No'        Then    1
        When    'Abstain'   Then    2
        When    'Yes'       Then    3
        Else    -1
    End                     As  Position_Value
    FROM    votes   a
    WHERE   created_at =    (
        SELECT  MAX(created_at) as  created_at
            FROM    votes   b
            WHERE   a.user_id   =   b.user_id
            AND motion_id   =   #{motion.id}
    )
    ORDER   BY  Position_Value

如果它不能正常工作,无论如何!你可以试试这个:

Select  *
    From    (
        SELECT  *
    ,   Case    a.position
            When    'Block'     Then    0
            When    'No'        Then    1
            When    'Abstain'   Then    2
            When    'Yes'       Then    3
            Else    -1
        End                     As  Position_Value
        FROM    votes   a
        WHERE   created_at =    (
            SELECT  MAX(created_at) as  created_at
                FROM    votes   b
                WHERE   a.user_id   =   b.user_id
                AND motion_id   =   #{motion.id}
        )
    )   As  Result
    ORDER   BY  Position_Value

关于sql - 按数据库中的字符串名称排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362872/

相关文章:

ruby - Webrick 代理 + cURL 返回错误请求

ruby-on-rails - 命令 'rails server' 不工作或 Rails 服务器命令不工作

sql - 正则表达式匹配中的列

mySQL 内连接与 where 语句

mysql - SQL查询和一条记录的多个结果

ruby-on-rails - Rails没有通过join模型运行has_many的destroy回调

ruby-on-rails - 为什么 schema.rb 在运行 rake db :migrate? 时会发生变化(在 Git 看来)

jquery - 在 fullcalendar.js 的事件中渲染 HTMLS 标签

sql - 重命名 SQL Server 中的约束?

ruby - 计算字符串中前面没有反斜杠的引号