MySQL按顺序排序,但需要整数

时间:2012-06-15 21:53:11

标签: mysql casting sql-order-by

我想按以下顺序订购字符串的成绩。

K, 1, 2, 4, .... 12

但我一直得到5, 4, 3, ... 12, K, 1

sims_classroom中的成绩列是VARCHAR(255),表是latin1;

我已经尝试了书中的每一个演员和技巧。目前我通过向它添加0来获得以下技巧。我做错了什么?

SELECT 
        (SELECT district_get_name_function(sod.parent_id, sod.id)) AS 'district_name', 
        (SELECT school_get_name_function(so.id)) AS 'school_name',
        st.teacher_username,
        st.teacher_first_name,
        st.teacher_last_name,
        c.name as 'classroom_name',
        c.grade,
        c.id,
        d.name AS 'discipline_name',
        d.id AS 'discipline_id',
        lc.name AS 'program_name',
        lc.id AS 'program_id'
    FROM sims_classroom c
.
.
.

    ORDER BY 
            CASE lower(sort_direction) WHEN 'asc' THEN
                CASE lower(sort_order)
                    WHEN 'grade' THEN 
                                 CASE c.grade 
                                    WHEN 'K' THEN 0
                                    ELSE (c.grade + 0)
                                 END
                    WHEN 'teachername' THEN lower(st.teacher_first_name)
                    ELSE c.name
                END
            END ASC,
            CASE lower(sort_direction) WHEN 'desc' THEN
                CASE lower(sort_order)
                    WHEN 'grade' THEN 
                                 CASE c.grade 
                                    WHEN 'K' THEN 10000
                                    ELSE (c.grade + 0)
                                 END
                    WHEN 'teachername' THEN lower(st.teacher_first_name)
                    ELSE c.name
                END
            END DESC

2 个答案:

答案 0 :(得分:0)

您可以为成绩创建查找表。它将具有Grade_Name(即'K','1','2'等)和Grade_Order作为int。

你有这样的记录:

Grade_Name    Grade_Order
K             1
1             2
2             3
3             4

等等。

然后,您可以将该查找表添加到JOIN和ORDER BY Grade_Order。

答案 1 :(得分:0)

我只能这样做。

WHEN 'grade' THEN 
                             CASE c.grade 
                                 WHEN 'K' THEN '00'
                                 WHEN '9' THEN '09'
                                 WHEN '8' THEN '08'
                                 WHEN '7' THEN '07'
                                 WHEN '6' THEN '06'
                                 WHEN '5' THEN '05'
                                 WHEN '4' THEN '04'
                                 WHEN '3' THEN '03'
                                 WHEN '2' THEN '02'
                                 WHEN '1-2' THEN '01'
                                 WHEN '1' THEN '01'
                                 ELSE c.grade
                             END
相关问题