mysql - 如何通过查询编写复杂的订单

标签 mysql

我在 MYSQL 中有一个表,我需要对其执行选择,然后通过相当复杂的逻辑对其进行排序。这是我的逻辑示例:

if(column_a is not null && column_a > 0){
   var_a = column_a
else
   var_a = 1;

if(column_a is not null){
   var_b = column_b
else
   var_b = 0

if(column_c is not null){
   var_c = column_c
else
   var_c = column_d

按 (var_b*var_c)/var_a 排序

所以基本上,我想按照 SELECT * from mytable WHERE parameter = value ORDER BY variable_to_order_by 的方式做一些事情。我将不得不为 variable_to_order_by 使用一些公式,但我找不到任何不涉及八个单独的 CASE WHERE 语句的方法,这看起来非常困惑。还有其他建议吗?

谢谢!

最佳答案

对于一种卑鄙的方式,您可以在 order by 子句中使用函数。具体来说,可以使用ififnull 函数。因此,您应该能够执行以下操作:

SELECT ...
ORDER BY IF(some_value IS NOT NULL AND some_value RLIKE '^[[:digit:]]+$', some_value, other_value)
       - (column_baz + IF(foo > bar, a, b))/(IFNULL(yet_another_value, 0) + IF(foo > bar, a, b))

(如果您想要包含所有实数而不仅仅是整数,如果您不想包含以 0 开头的字符串等,则正则表达式可能必须更复杂)

关于mysql - 如何通过查询编写复杂的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145501/

相关文章:

c# - 在 .NET 中将整个数据库从一台服务器复制到另一台服务器

Mysql 选择所有与字符串中的数字匹配的内容

mysql - 如何修复迁移 Laravel 中的 'error : SQLSTATE[HY000]'

MySQL 适当的功能

mysql - 具有多个类的 RowMapper

mysql - 如何在 MySQL 中查找上周的数据

mysql - 将 MySQL 数据库从 Linux 迁移到 Mac?

mysql - 如何过滤 hashMap 的结果以选取以某个字母开头的所有键 Groovy

mysql - 如何比较同一个表中同一列的数据

php - 拉维尔 5 : form data won't submit to the database - no error shown