首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql SUM( column )不会对列联合上的元素求和

问mysql SUM( column )不会对列联合上的元素求和
EN

Stack Overflow用户
提问于 2012-04-15 20:46:29
回答 1查看 182关注 0票数 0

谁能告诉我为什么会有这样的代码:

代码语言:javascript
复制
SELECT t.prob FROM 
(SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els) AS e2) AS t
 UNION ALL (SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els2 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els2) AS e2)
 UNION ALL (SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els3 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els3) AS e2);

是否生成与this相同的输出,而不是'prob‘的和?

代码语言:javascript
复制
SELECT SUM(t.prob) FROM 
(SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els) AS e2) AS t
 UNION ALL (SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els2 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els2) AS e2)
 UNION ALL (SELECT e1.evaled/IFNULL(NULLIF(e2.total,0),1) AS prob FROM 
    (SELECT COUNT(*) AS evaled FROM els3 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els3) AS e2);

(代码基本上为三个表els、els2和els3中的每个表创建了一个只包含一个值的列prob,然后将这三个表组合成一个列,我想从该列中获得3个元素的总和)

我想出了另一个代码。它是有效的,它是一个更清晰的声明,所以不用担心:

代码语言:javascript
复制
SELECT SUM(t.evaled/IFNULL(NULLIF(t.total,0),1)) as sumatory FROM
(SELECT evaled,total FROM
 (SELECT COUNT(*) AS evaled FROM els WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els) AS e2
UNION ALL SELECT * FROM
 (SELECT COUNT(*) AS evaled FROM els2 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els2) AS e2
UNION ALL SELECT * FROM
 (SELECT COUNT(*) AS evaled FROM els3 WHERE evals=0) AS e1 
     INNER JOIN (SELECT COUNT(*) AS total FROM els3) AS e2) as t;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-15 21:10:08

我不确定你的解决方案出了什么问题,但我想我知道你想要实现的是什么。像这样的方法怎么样:

代码语言:javascript
复制
SELECT 
 (SELECT COUNT(*)/(SELECT COUNT(*) FROM els) AS evaled FROM els WHERE evals=0)
 +
 (SELECT COUNT(*)/(SELECT COUNT(*) FROM els2) AS evaled FROM els2 WHERE evals=0) 
 +
 (SELECT COUNT(*)/(SELECT COUNT(*) FROM els3) AS evaled FROM els3 WHERE evals=0)
 /3

编辑:如果你想要平均值,我想你最后需要一个/3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10162134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档