Sql 按两列排序数据

Sql 按两列排序数据,sql,Sql,如何按两个独立的列对一组数据进行排序 两列中的一列并不总是0,我需要按任一列中最大的一列排序 当前正在从中获取此数据集 order by Value1 desc, Value2 desc; Name | Value1 | Value 2 ---------------------------------------- A | 17 | 0 B | 11 | 0 C |

如何按两个独立的列对一组数据进行排序

两列中的一列并不总是0,我需要按任一列中最大的一列排序

当前正在从中获取此数据集

order by Value1 desc, Value2 desc;

Name       |  Value1     |  Value 2
----------------------------------------
  A        |    17       |    0
  B        |    11       |    0
  C        |    0        |    57
  D        |    0        |    15
但我希望它是这样的:

    Name       |  Value1     |  Value 2
    ----------------------------------------
      C        |    0        |    57
      A        |    17       |    0
      D        |    0        |    15
      B        |    11       |    0

不知道您使用的是什么RDMBS,但如果是postgres,则
grest
func可以在此处提供帮助:

SELECT * FROM FOO ORDER BY GREATEST(Value1, Value2) desc;
听起来,
magest
func将从每行的2列返回更高的值

(其他RDBMS也可能支持
grest
您必须检查您使用的内容)

这是MySQL上的:

按顺序从tablename中选择*

值1为两列之一时的情况始终为0;你可以按总和排序?不一定是0,为清楚起见编辑。为什么会这样?排序背后的逻辑是什么?Value1和Value2都是单独事件发生的计数。我想看到排名最高的“Name”,不管它是按Value1还是Value2排序的。我使用的是PL/SQL。此函数似乎返回“order by Value2 desc,Value1 desc”。朝着正确的方向迈出了一步,但并不完全是我想要的。@sullysunday根据输出结果,你确定这就是正在发生的事情吗?您是否确保将
Value1
Value2
都括在括号中?根据和:
magest
返回值列表中的最大值,就像postgres的版本一样。
Value1
Value2
的数据类型是什么?您是在您的示例数据上运行它,还是在您尝试的数据中包含null(因为null在比较ops时有不同的行为)?按最大值排序将返回value1和value2之间的最大值,这就是您所要求的,不是吗?Value2 desc,value1 desc将返回其他内容。所有内容都包含在参数中,数据类型为整数。我在实际数据上运行它,不是示例数据,但没有空值,只有大于并包含0的值。它按顺序(C、D、A、B)返回行