2012-03-31 14 views
0

檢索到的我想做些事情是這樣的:如果你想一排如何分組結果從一個列在MySQL

SELECT sum(quantity) 
FROM orders 
WHERE order_code between **code1** and **code2** as group1 
and order_code between **code3** and **code4** as group2 
and order_code between **code5** and **code6** as group3 

回答

1

有三列:

SELECT SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)), -- group1 
     SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)), -- group2 
     SUM(IF(order_code BETWEEN ... AND ..., quantity, 0)) -- group3 
    FROM orders 
; 

如果你想要一個列與三行:

SELECT group_number, 
     SUM(quantity) 
    FROM (SELECT quantity, 
       CASE WHEN order_code BETWEEN ... AND ... THEN 1 -- group1 
        WHEN order_code BETWEEN ... AND ... THEN 2 -- group2 
        WHEN order_code BETWEEN ... AND ... THEN 3 -- group3 
        ELSE NULL 
       END AS group_number 
      FROM orders 
     ) AS t 
WHERE group_number IS NOT NULL 
GROUP 
    BY group_number 
; 

(子查詢實際上並不是必要的,但我認爲它使得它更清楚發生了什麼)。

+0

謝謝你的回答。 **一行三列工作良好**,但**一列三行**讓我錯誤'每個派生表都必須有自己的別名',並且在我修復別名後它工作良好。 – 2012-03-31 19:12:53

+0

@KhaledLela:不客氣!我已經添加了你提到的別名。如果我的答案幫助了你,請[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 :-) – ruakh 2012-03-31 19:14:48

+0

感謝您的快速回答,我正在編輯您的答案,但您先前在我身邊。 – 2012-03-31 19:19:45