2010-10-19 156 views
14

我有color列的MySQL表中,其类型是ENUM('RED', 'YELLOW', 'MY_COLOR', 'BLACK'),另一个name列的类型是VARCHAR(30)如何对MySQL数据库中的ENUM列进行排序?

我想获得的所有表行按照下面的顺序:第一

  • YELLOW行,由name排序最后
  • RED行,由name
  • 在中间排序,所有其他行,按排序name

是否有可能在1查询中进行这种排序?

回答

26

用途:

ORDER BY CASE color 
      WHEN 'YELLOW' THEN 1 
      WHEN 'RED' THEN 3 
      ELSE 2 
     END, name 
+0

非常感谢! – 2010-10-19 04:07:31

1

这工作得很好与MySQL。但是对于h2数据库,它会显示一个错误 引起的:org.h2.jdbc.JdbcSQLException:按表达式排序“CASEWHEN((color ='YELLOW'),1,CASEWHEN((color ='RED'),3))”在这种情况下必须在结果列表中; SQL语句:

为避免出现错误,请在select子句中添加stmt“CASEWHEN((color ='YELLOW'),1,CASEWHEN((color ='RED'),3))”。

相关问题