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