-1

我想知道为什么下面的查询没有正确检索两个聚合函数(sum)之间的差异?

SELECT 
    epa.status as Status,
    sum(equip_port_usage.total_nbr_ports) as Total,
    sum(equip_port_usage.NBR_PORTS_ASSIGNED) as Used,
    sum(equip_port_usage.NBR_PORTS_ASSIGNED)
      - sum(equip_port_usage.NBR_PORTS_ASSIGNED) as Difference
  FROM site_inst
  INNER JOIN site_attr_settings
     ON site_attr_settings.site_inst_id = site_inst.site_inst_id
  INNER JOIN epa on epa.site_inst_id=site_inst.site_inst_id
  INNER JOIN equip_inst ON equip_inst.site_inst_id=site_inst.site_inst_id
  INNER JOIN equip_port_usage
     ON equip_port_usage.equip_inst_id=equip_inst.equip_inst_id
WHERE site_inst.SITE_HUM_ID = 'CLEUS'
GROUP BY epa.status;

输出如下

Ok        303876  10276     0
Faulty     19044    644     0
Reserved   19872    672     0

我期待它是

Ok        303876  10276  293600
Faulty     19044    644   18400
Reserved   19872    672   19200
4

2 回答 2

2

这是您的代码中的复制和粘贴失败。你在计算

sum(equip_port_usage.NBR_PORTS_ASSIGNED)
 - sum(equip_port_usage.NBR_PORTS_ASSIGNED)

始终为 0。

尝试:

SELECT 
    epa.status as Status,
    sum(equip_port_usage.total_nbr_ports) as Total,
    sum(equip_port_usage.NBR_PORTS_ASSIGNED) as Used,
    sum(equip_port_usage.total_nbr_ports)
     - sum(equip_port_usage.NBR_PORTS_ASSIGNED) as Difference
  FROM site_inst
  INNER JOIN site_attr_settings
     ON site_attr_settings.site_inst_id = site_inst.site_inst_id
  INNER JOIN epa ON epa.site_inst_id=site_inst.site_inst_id
  INNER JOIN equip_inst ON equip_inst.site_inst_id=site_inst.site_inst_id
  INNER JOIN equip_port_usage
     ON equip_port_usage.equip_inst_id=equip_inst.equip_inst_id
 WHERE site_inst.SITE_HUM_ID = 'CLEUS'
 GROUP BY epa.status
于 2012-07-06T08:53:49.780 回答
0

你对同一列求和两次,然后减去两个结果,所以当然你总是会得到0.

于 2012-07-06T08:53:18.093 回答