使用Case和Group By以特定顺序获取Grouped结果

时间:2012-03-16 20:11:00

标签: mysql case nested-queries

我过去曾问过一个类似的问题,但没有得到我需要的东西,这是旧问题

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 > 0pricesumTotalStock排序除此以外。然后,此内部结果集按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 ASCDESC不起作用,我似乎必须将ORDER BY放在DESC语句的末尾,但之后就是在任何一种情况下都排序totalStock,这是错误的。

考虑到上述两个问题,我不确定这实际上是否正常工作!

我现在已经花了大部分时间和整个晚上用谷歌和各种SO问题,但我担心我已经放弃了,不得不发布另一个!

如果有人可以发给我一些可以排序的代码,我将永远感激不尽!

我正在使用MySQL数据库,打扰priceitem列在所有情况下都是数字,而varChar是{{1}}字段。一旦我能够使用这些领域,我可以提取我需要的所有其他东西,所以希望你不应该只需要指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

试试这个

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

不允许你之前使用ASC / DESC做什么(如果你想到你想要做什么,那真的不应该这样)。可以把整个CASE语句看作一个变量列,你不能用两种不同的方式对同一列进行排序