我有一张看起来像这样的表
ITEM_NAME | NUM_SOLD | NUM_VIEWS
Apple | 50 | 75
Orange | 40 | 85
Pear | 80 | 70
Cherry | 15 | 60
我想根据最后两列 中最高的数字对此进行排序。
所以上面的表格会这样排序:
ITEM_NAME | NUM_SOLD | NUM_VIEWS
Orange | 40 | 85
Pear | 80 | 70
Apple | 50 | 75
Cherry | 15 | 60
您可以看到,根据我打入的数字,它们大多按NUM_VIEWS
排序,但因为Pear
的{{1}}值高于NUM_SOLD
的值Apple
的值,它在Orange
和Apple
之间排序。
这个Apple和Pear的例子是我无法正常工作的。
答案 0 :(得分:18)
ORDER BY GREATEST(num_sold, num_views)
答案 1 :(得分:4)
order by
case when num_sold>num_views
then num_sold
else num_views
end
答案 2 :(得分:3)
正如其他用户所提到的,使用GREATEST功能是最合适的。我想补充一点,如果你的列默认为NULL或者可能包含NULL值,你可能需要COALESCE(mysql coalesce() docs)你的值为零。
这是因为如果传递的任何值为NULL GREATEST将返回NULL (mysql greatest() docs),因此通过将任何列中包含NULL值的所有值推送到你的降序的底部。
如果您的计数具有零默认值,那么它将没有问题,但如果它们默认为空,或者您需要此方法用于任何其他具有空值的表,那么这将是必需的。在使用通常具有NULL默认值的日期时,它让我感到很沮丧。
ORDER BY GREATEST(
COALESCE(NUM_SOLD, 0), # returns the column value or zero if null
COALESCE(NUM_VIEWS, 0)
)
注意:我没有足够的积分将其添加到评论中,但我认为这对于回答非常有价值。
答案 3 :(得分:0)
我通常会使用IF语句
IF @a > @b
BEGIN
SELECT Col1, Col2, ... FROM Table1 Where... ORDER BY Col1
END
ELSE
BEGIN
SELECT Col1, Col2, ... FROM Table1 Where... ORDER BY Col2
END