2012-03-16 102 views
2

我曾问过去类似的问题,但并没有完全得到我所需要的分组结果,这里的老问题使用案例和集团通过获得特定的顺序

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 > 0price另有命令分组得到内的结果集。这个内部结果集然后由sumTotalStock订购。

最重要的一点是

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'd DESCASC不工作,我似乎已经把DESC在的结束ORDER BY声明,但在任何情况下它都会订购DESC,这是错误的。

鉴于上述两个问题,我不确定这实际上是在工作!

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

如果任何人都可以发布我的代码,我会永远感激!

我正在使用MySQL数据库,烦扰totalStockprice列在所有情况下都是数字,而itemvarChar字段。一旦我能够与这些领域合作,我就可以提取其他所有我需要的东西,所以希望你们不需要任何东西来指导我朝着正确的方向发展?

回答

0

试试这个

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

你所用ASC之前做/ DESC是不允许的(它真的,如果你想想你试图做不应该)。把整个CASE陈述想象成一个可变的列,你不能对两列不同的方式进行排序,只是没有意义

+0

我看到,反转价格......聪明!然而,虽然它似乎正在工作,但我得到的结果是错误的。这里是我的开发网站:http://dev.hartnollguitars.co.uk/Search.aspx?subcategory=Gibson-Les-Pauls&sort=price%20desc这个链接不使用case语句,而这个:http:// dev。 hartnollguitars.co.uk/Search.aspx?subcategory=Gibson-Les-Pauls&sort=price%20desc&orderCase=yes确实。在这两个链接中,WHERE子句都是相同的,但结果却不同,我认为没有任何股票或“组”中只有一个项目没有显示,但事实并非如此 – 2012-03-16 21:29:00

+0

只是为了阐明作品中,'库存总额'在由库存水平返回的页面上显示,并且输出显示'X选项'表示有多少分组项目,即在现实生活中,分组项目是选项(可用完成)某些产品可能只有一个选项,因此在分组数据中只返回一个项目,在这些情况下排序有些不相关,但从结果集中忽略某些项目似乎是随机的! – 2012-03-16 21:32:37

+0

再次看,阅读,我不认为这是做到这一点。内部查询正在排序后,我认为,所以它不好。我需要对这些组进行排序,并且我知道如何做到这一点的唯一方法是使用“GROUP_CONCAT”,但是随后获取多列数据变得非常麻烦。我想我必须弄清楚“加入”如何工作。 – 2012-03-16 21:59:24