2

過去に同様の質問をしたことがありますが、必要な情報が得られませんでした。これが古い質問です。

SQLでMAX値とMIN値を持つ行のIDを取得するにはどうすればよいですか

私がする必要があるのはitem、データベース内の同じフィールドを持つすべてのアイテムをグループ化したデータのセットを取得することですが、特定の方法でグループ化を順序付けるために、データセットが特定のアイテム ID に関連する詳細を出力することを確認してください。(私の場合は、いずれかのフィールドで注文するtotalStock必要があります。pricetotalStockdescpriceasc

このSOの質問は私の質問によりよく答えていると思いますが、私Joins恐れています

MySQLクエリは、GROUP BYで結果を並べ替えます

ここに私がいる場所の例があります:

"SELECT * FROM (select *, count(id) as Variants, sum(totalStock) as sumTotalStock 
FROM `products` WHERE id > 0 AND `display`='1' 
GROUP BY item ORDER BY CASE WHEN totalStock > 0 THEN totalStock ELSE price END DESC) 
AS unknownVar 
ORDER BY sumTotalStock"

SQL についての私の理解が失われているのは、 ifまたはそれ以外itemの順序で並べられたグループ化でグループ化されたデータベースから結果の内部セットを取得することを目的としています。この内部結果セットは order byです。totalStocktotalStock > 0pricesumTotalStock

重要なビットは

ORDER BY CASE WHEN totalStock > 0 THEN totalStock ELSE price END

これは私に2つの問題を与えています。

1) 奇妙な出力が表示され、表示されるべきコンテンツが欠落しています。

2) また、ソート順を変更できるようにする必要があります

ORDER BY CASE WHEN totalStock > 0 *DESC* THEN totalStock ELSE price *ASC* END

astrix'dが機能DESCASCない場合DESC、ステートメントの最後に配置する必要があるようですが、どちらORDER BYの場合も順序付けが間違っています。DESC

上記の 2 つの問題を考えると、これが実際に機能しているかどうかはわかりません。

私は今、午後のほとんどと一晩中、Google とさまざまな SO の質問でこれに費やしてきましたが、残念ながらあきらめて、別の投稿をしなければなりませんでした!

誰かがこれをソートするコードを投稿してくれたら、私は永遠に感謝します!

私はMySQLデータベースを使用しています.and列はすべての場合で数値でtotalStockあり、フィールドです。これらのフィールドでこれを機能させることができれば、必要な他のすべてを抽出できます。うまくいけば、正しい方向に向けるためにそれ以上は必要ありませんか?priceitemvarChar

4

1 に答える 1

0

これを試して

ORDER BY (CASE WHEN totalStock > 0 THEN totalStock ELSE -1 * price END) DESC

以前にASC/DESCで行っていたことは許可されていません(そして、自分がやろうとしていたことを考えれば、実際には許可されるべきではありません)。そのCASEステートメント全体を可変列と考えてください。同じ列を2つの異なる方法で並べ替えることはできません。

于 2012-03-16T20:23:59.513 に答える