我过去曾问过一个类似的问题,但没有得到我需要的东西,这是旧问题
How do I get the ID of a rows which have MAX and MIN values in SQL
我需要做的是获取一组数据,这些数据已将数据库中具有相同item
字段的所有项目分组,但确保数据集输出与特定项目ID相关的详细信息,以便以特定方式订购分组。 (在我的情况下,我需要按totalStock
字段或price
订购,如果totalStock
,则desc
订购price
,订购asc
我认为这个问题更好地回答了我的问题,但我不明白Joins
我害怕
MySQL query order the results in 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失去理解的目的是从我的数据库中获取一组内部结果,按item
分组,totalStock
totalStock > 0
或price
按sumTotalStock
排序除此以外。然后,此内部结果集按ORDER BY CASE WHEN totalStock > 0 THEN totalStock ELSE price END
排序。
重要的一点是
ORDER BY CASE WHEN totalStock > 0 *DESC* THEN totalStock ELSE price *ASC* END
这给了我两个问题。
1)一些奇怪的输出,遗漏了一些应该显示的内容。
2)另外,我需要能够更改排序顺序
DESC
astrix'd ASC
和DESC
不起作用,我似乎必须将ORDER BY
放在DESC
语句的末尾,但之后就是在任何一种情况下都排序totalStock
,这是错误的。
考虑到上述两个问题,我不确定这实际上是否正常工作!
我现在已经花了大部分时间和整个晚上用谷歌和各种SO问题,但我担心我已经放弃了,不得不发布另一个!
如果有人可以发给我一些可以排序的代码,我将永远感激不尽!
我正在使用MySQL数据库,打扰price
和item
列在所有情况下都是数字,而varChar
是{{1}}字段。一旦我能够使用这些领域,我可以提取我需要的所有其他东西,所以希望你不应该只需要指出我正确的方向吗?
答案 0 :(得分:0)
试试这个
ORDER BY (CASE WHEN totalStock > 0 THEN totalStock ELSE -1 * price END) DESC
不允许你之前使用ASC / DESC做什么(如果你想到你想要做什么,那真的不应该这样)。可以把整个CASE语句看作一个变量列,你不能用两种不同的方式对同一列进行排序