2017-06-16 138 views
-1

兩個查詢使用相同的表(此處測試)SQL合併結果

首先查詢:

SELECT `test` as t1, COUNT(*) as t2 
FROM `test_table` 
WHERE `test` > 5 
GROUP BY `test` 

返回結果在形式上

-------------------------------------------------- 
| t1 | t2 | 
-------------------------------------------------- 
| 6 | 2 | 
-------------------------------------------------- 
| 8 | 7 | 
-------------------------------------------------- 

第二個查詢:

SELECT TRUNCATE(((num1/num2) * 100),3) as t3 
FROM 
(SELECT COUNT(*) as num1 
FROM `test_table` 
WHERE test > 5 
group by `test`) a, 
(SELECT COUNT(*) as num2 
FROM `test_table` 
WHERE test > 5) b 

將結果以表格

-------------------------------------------------- 
| t3  | 
-------------------------------------------------- 
| 40.456% | 
-------------------------------------------------- 
| 59.544% | 
-------------------------------------------------- 

我想什麼有是:

-------------------------------------------------- 
| t1 | t2 | t3 | 
-------------------------------------------------- 
| 6 | 2 | 40.456% | 
-------------------------------------------------- 
| 8 | 7 | 59.544% | 
-------------------------------------------------- 

我該怎麼辦呢?聯盟將t3結果放在t1 t2以下,也許加入聲明?但加入什麼?或者,我可以從這兩個選擇所有數據做出一個查詢嗎?

+0

你從哪裏得到40.456。 2/9 * 100 = 22.222? –

+0

@P.Salmon我沒有得到40.456。我寫了「返回結果的形式」,這意味着有一個三位小數的數字。你可以想象我的桌子裏沒有兩排,但有很多,所以我只是想出了一個例子。 – gwgvwegffsd

+0

下一次,請參閱:[爲什麼我應該爲我認爲是非常簡單的SQL查詢提供一個MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-提供一個mcve爲什麼看起來是一個非常簡單的sql查詢) – Strawberry

回答

0

這可以用你的第二個查詢的一些修改來完成:

SELECT a.t1, num1 as t2, TRUNCATE(((num1/num2) * 100),3) as t3 
FROM 
(SELECT `test` as t1, COUNT(*) as num1 
FROM `test_table` 
WHERE test > 5 
group by `test`) a, 
(SELECT COUNT(*) as num2 
FROM `test_table` 
WHERE test > 5) b 
+0

謝謝,簡短易讀 – gwgvwegffsd

0
SELECT 
    Z.t1, Z.t2, Z1.t3 
FROM 
    (SELECT 
     `test` AS t1, COUNT(*) AS t2 
    FROM 
     `test_table` 
    WHERE 
     `test` > 5 
    GROUP BY `test`) Z 
     INNER JOIN 
    (SELECT 
     t1, TRUNCATE(((num1/num2) * 100), 3) AS t3 
    FROM 
     (SELECT 
     test t1, COUNT(*) AS num1 
    FROM 
     `test_table` 
    WHERE 
     test > 5 
    GROUP BY `test`) a, (SELECT 
     COUNT(*) AS num2 
    FROM 
     `test_table` 
    WHERE 
     test > 5) b) Z1 ON Z.t1 = Z1.t1; 

試試上面的代碼。

希望這會幫助你。

+0

爲什麼你甚至需要一個連接?我在這個問題中錯過了些微妙的東西嗎? – nCessity

0

它在你的例子結構的方式,你應該能夠加入他們的test_table.test(您使用組領域通過對)

1

在選擇使用子查詢使得它相當的可讀性

DROP TABLE IF EXISTS TEST_TABLE; 
    CREATE TABLE TEST_TABLE(TEST INT); 
    INSERT INTO TEST_TABLE VALUES 
    (6),(6), 
    (8),(8),(8),(8),(8),(8),(8); 

    SELECT `test` as t1, COUNT(*) as t2, 
      TRUNCATE(COUNT(*)/(SELECT COUNT(*) FROM TEST_TABLE WHERE TEST > 5) * 100,3) AS T3 
    FROM `test_table` 
    WHERE `test` > 5 
    GROUP BY `test` 

結果

+------+----+--------+ 
| t1 | t2 | T3  | 
+------+----+--------+ 
| 6 | 2 | 22.222 | 
| 8 | 7 | 77.777 | 
+------+----+--------+ 
2 rows in set (0.00 sec)