2012-12-06 69 views
1

我想总结一个查询的输出,但我正在挣扎。下面的查询检查fax_authorized表,并根据他们的电子邮件地址生成扩展摘要。总结来自MySQL查询的输出

我有以下查询:

SELECT extended_number, IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
    IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
    IF(COUNT(extension_id)>10,1,0) AS 'fax10+', COUNT(extension_id) AS 'fax_total' 
FROM fax_authorized fa, extension e 
WHERE fa.extension_id = e.id 
GROUP BY extended_number; 

输出看起来是这样的:

+-----------------+------+-------+--------+-----------+ 
| extended_number | fax5 | fax10 | fax10+ | fax_total | 
+-----------------+------+-------+--------+-----------+ 
| 0009*004  | 1 |  0 |  0 |   1 | 
| 0139*601  | 0 |  1 |  0 |   6 | 
| 0139*743  | 1 |  0 |  0 |   2 | 
| 0139*996  | 1 |  0 |  0 |   1 | 
+-----------------+------+-------+--------+-----------+ 

我想什么是总结基础上离开了这个数据(extended_number,4),以便为上面的示例0139将具有fax5 = 2,fax10 = 1,fax_total = 9。

我曾经尝试这样做,不工作:

SELECT extended_number, SUM(IF(COUNT(extension_id)<5,1,0)) AS 'fax5', 
    SUM(IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0)) AS 'fax10', 
    SUM(IF(COUNT(extension_id)>10,1,0)) AS 'fax10+', 
    COUNT(LEFT(extension_id,4)) AS 'fax_total' 
FROM fax_authorized fa, extension e 
WHERE fa.extension_id = e.id 
GROUP BY LEFT(extended_number,4); 

编辑:我用Saharsh沙阿回答下面来解决这个问题,可是撞到了另外一个,我认为是值得加入。我试图从他的嵌套子查询解决方案创建一个视图,但无法执行,因为视图中不允许使用子查询。所以,我创建了两个相关的观点如下:

CREATE VIEW vw_xoom_faxdetail AS 
    SELECT LEFT(extended_number,4) client_id, 
    IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
    IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
    IF(COUNT(extension_id)>10,1,0) AS 'fax10plus', 
    COUNT(extension_id) AS 'fax_total' 
FROM fax_authorized fa, extension e WHERE fa.extension_id = e.id 
GROUP BY client_id; 

CREATE VIEW vw_xoom_fax AS 
SELECT client_id, SUM(fax5) fax5, SUM(fax10) fax10, 
    SUM(fax10plus) 'fax10+', SUM(fax_total) fax_total 
FROM vw_xoom_faxdetail 
GROUP BY client_id; 
+0

你说的错误是什么意思? –

+0

@Jack - 对不起,我的意思是它不起作用,只是给我一个语法错误 – btongeorge

回答

0

试试这个:

SELECT extended_number, SUM(fax5) fax5, SUM(fax10) fax10, SUM(fax10plus) 'fax10+', SUM(fax_total) fax_total 
FROM (SELECT LEFT(extended_number,4) extended_number, IF(COUNT(extension_id)<5,1,0) AS 'fax5', 
      IF(COUNT(extension_id)>5 AND COUNT(extension_id)<11,1,0) AS 'fax10', 
     IF(COUNT(extension_id)>10,1,0) AS 'fax10plus', COUNT(extension_id) AS 'fax_total' 
     FROM fax_authorized fa, extension e WHERE fa.extension_id = e.id 
     GROUP BY extended_number) AS A 
GROUP BY extended_number; 
+0

工程太棒了!谢谢。所以我正确理解这一点,您的解决方案是将我的聚合查询嵌套在另一个中?我在内部和外部查询中使用extended_number时感到困惑,实际上,在外部查询中,它只是extended_number的左边4个字符。 – btongeorge

+0

我现在有另一个问题 - 我想从这个查询创建一个视图用于我的数据库,但是我得到一个错误:错误1349(HY000):视图的SELECT包含FROM子句中的子查询 – btongeorge

+0

原来的子查询aren在视图定义中不允许 - 已编辑该问题以显示我如何创建两个相关的视图定义。 – btongeorge