2012-03-31 12 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