[英]mysql SUM(column) won't sum elements on column union
Can anybody tell me why this code: 谁能告诉我为什么这样的代码:
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);
produces the same output as this instead of the sum of 'prob'? 产生与此相同的输出,而不是“概率”的总和?
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);
(the code basically creates a column prob containing just one value for each of three tables els, els2 and els3 and then combines the three of them into just one column from which I want the sum of its 3 elements) (代码基本上创建了一个列prob,其中只包含三个表els,els2和els3的每一个的一个值,然后将它们三个合并为一个列,我希望从中将其3个元素的总和
I came up with this other code. 我想出了其他代码。 It works and it's a clearer statement, so nevermind:
它有效,并且声明更清晰,所以不要紧:
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;
Not sure what goes wrong in your solution but I think I get what your are trying to achieve. 不知道您的解决方案出了什么问题,但是我想我知道您正在努力实现的目标。 How about something like this approach:
这样的方法怎么样:
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
Edit: And if you want average I guess you need a /3
at the end.. 编辑:并且,如果您想要平均值,我想您最后需要
/3
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.