2

我过去曾问过类似的问题,但没有完全得到我需要的东西,这是老问题

如何获取 SQL 中具有 MAX 和 MIN 值的行的 ID

我需要做的是获取一组数据,它对item数据库中具有相同字段的所有项目进行了分组,但确保数据集输出与特定项目 ID 相关的详细信息,以便以特定方式对分组进行排序。(在我的情况下,我需要按任一totalStock字段订购,或者price,如果totalStock然后订购,descprice订购asc

认为这个 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或itemelse 排序。然后这个内部结果集按 排序。totalStocktotalStock > 0pricesumTotalStock

重要的是

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

这给了我两个问题。

1)一些奇怪的输出,遗漏了一些应该显示的内容。

2)另外,我需要能够更改排序顺序

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

使用 astrix'dDESC并且ASC不起作用,我似乎必须放在​​语句DESC的末尾ORDER BY,但是在任何一种情况下它都是排序DESC的,这是错误的。

鉴于上述两个问题,我不确定这是否真的有效!

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

如果有人可以向我发布一些可以对此进行排序的代码,我将永远感激不尽!

我正在使用 MySQL 数据库,在所有情况下,totalStockprice列都是数字,并且item是一个varChar字段。一旦我可以使用这些字段,我就可以提取我需要的所有其他内容,所以希望你不需要更多的东西来为我指明正确的方向?

4

1 回答 1

0

尝试这个

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

你以前用 ASC/DESC 做的事情是不允许的(如果你考虑一下你想做的事情,那真的不应该)。将整个 CASE 语句想象成一个变量列,您不能以两种不同的方式对同一列进行排序,这没有任何意义

于 2012-03-16T20:23:59.513 回答