2012-10-18 51 views
1

我試圖找到一種方法來按價格「組」分組數據庫中的價格。 所以我的數據庫表看起來是這樣的:自定義查詢計數和分組

+-------+------------------+ 
| Field | Type    | 
+-------+------------------+ 
| id | int(11) unsigned | 
| name | varchar(255)  | 
| price | varchar(30)  | 
+-------+------------------+ 

這些都是在我的數據庫表中的相關領域。 我試圖完成的是運行一個查詢,按價格範圍對結果進行分組,因此,介於$ 1和$ 10之間的項目將進入組1; $ 11至$ 20將進入價格組#2,等...所以它應該是這樣的:

+-------------+------------+ 
| price_group | item_count | 
+-------------+------------+ 
| $1-$10  | 10   | 
+-------------+------------+ 
| $11-$20  | 8   | 
+-------------+------------+ 
| $21-$30  | 22   | 
+-------------+------------+ 
| $31-$40  | 58   | 
+-------------+------------+ 
| $41-$40  | 3   | 
+-------------+------------+ 

我沒有,我試過,因爲我真的不知道從哪裏開始的任何代碼這個。仍在搜尋試圖找到線索。

+0

我很抱歉,但您的意思是價格存儲爲varchars?另外,有多少個price_groups? – raina77ow

+0

是的,價格現在存儲爲varchar。 我將不得不查看代碼,看看我是否可以將其更改爲小數,但我認爲這是可能的。 價格組的數量可以和我想要的一樣多 - 儘管我認爲我們決定在7以上,高達100美元。 –

+0

我將字段類型更改爲Decimal以使其工作。 –

回答

2

您可以按價格分組(由於您放置組劃分的地方而偏移1),除以10,將其轉換爲整數。考慮這個團體$ 21- $ 30。如果你減去一個,那將是$ 20- $ 29。除以10(並且轉換爲整數),該組中的任何內容都將返回2美元,從而爲價格組提供一個常數。

SELECT CAST((price - 1)/10 AS UNSIGNED) AS price_group, 
    SUM(item_count) as total_item_count 
FROM table_name 
GROUP BY price_group 

另外請注意,我沒有SUM(item_count)拿到總該組。

這裏返回的price_group只是十位數。例如,對於組「$ 21- $ 30」,返回的price_group將爲「2」。

+0

謝謝!這很好。 雖然我使用的是COUNT,但不是SUM。 COUNT會給出項目的總數,SUM會給出項目的總和(例如SUM(1,2,3,4)= 10。COUNT(1,2,3,4)= 4)。 –