2012-04-15 8 views
0

上の要素を合計しません誰が私を伝えることができ、なぜこのコード:MySQLのSUM(column)列組合

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); 

ではなく、「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); 

(コードは基本的に3つのテーブルのELSの各々に対してちょうど一つの値、els2とels3を含む列PROBを作成し、私はその3つの要素の和を先からわずか一つの列にそれらのうち3つを組み合わせました)

私はこの他のコードを思いついた。それは動作し、それはとても用事、明確声明だ:

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; 

答えて

1

ないソリューションでうまくいかないのかわからしかし、私は、私はあなたが達成しようとしているものを手に入れると思います。どのようにこのアプローチのようなものについて:

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を必要と推測平均したい場合は...

+0

ブリリアント。 (ありがとうございました) – NotGaeL