2012-03-16 101 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