5

私はそのように見えるテーブルを持っています

ITEM_NAME     | NUM_SOLD | NUM_VIEWS
Apple         |       50 |        75
Orange        |       40 |        85
Pear          |       80 |        70
Cherry        |       15 |        60

これを、最後の2列のいずれかで最も大きい番号で並べ替えたいと思います。

したがって、上記のテーブルは次のように並べ替えられます。

ITEM_NAME     | NUM_SOLD | NUM_VIEWS
Orange        |       40 |        85
Pear          |       80 |        70
Apple         |       50 |        75
Cherry        |       15 |        60

私が打ち込んだ数字では、ほとんどが。で並べ替えられていることがわかりますが、の値のいずれよりも値が高いNUM_VIEWSため、との間で並べ替えられます。PearNUM_SOLDAppleOrangeApple

このAppleとPearの例は、私が正しく動作させることができないものです。

4

4 に答える 4

20
ORDER BY GREATEST(num_sold, num_views)

MySQL 5.6リファレンスマニュアルGREATEST(value1,value2,...)の§12.3.2「比較関数と演算子」を参照してください。)

于 2012-08-27T19:46:34.153 に答える
4
order by
case when num_sold>num_views 
     then num_sold 
     else num_views 
end
于 2012-08-27T19:50:46.557 に答える
4

他のユーザーが述べているように、GREATEST関数を使用するのが最も適切です。ただし、列のデフォルトがNULLであるか、NULL値が含まれる可能性がある場合は、値をゼロでCOALESCE( mysqlcoalesce()docs )する必要があるかもしれません。

これは、渡された値のいずれかがNULLの場合にGREATESTがNULLを返すため(mysql great()docs)、したがって、いずれかの列のNULL値を持つすべての値を降順の最後にプッシュすることによってORDERBY句に影響を与えるためです。

カウントのデフォルトがゼロの場合は問題ありませんが、デフォルトでnullの場合、またはnull値を持つ他のテーブルにこのメソッドが必要な場合は、これが必要になります。多くの場合、デフォルトがNULLである日付を処理しているときに、私は気づきました。

ORDER BY GREATEST(
    COALESCE(NUM_SOLD, 0),  # returns the column value or zero if null
    COALESCE(NUM_VIEWS, 0)
) 

注:これをコメントに入れるのに十分なポイントはありませんが、答えには十分価値があると思いました。

于 2016-01-14T12:33:03.130 に答える
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
于 2012-08-27T19:49:39.190 に答える