Mysql 两个查询的SQL合并结果

Mysql 两个查询的SQL合并结果,mysql,sql,Mysql,Sql,两个查询使用相同的表(此处:test) 第一个问题: SELECT `test` as t1, COUNT( * ) as t2 FROM `test_table` WHERE `test` > 5 GROUP BY `test` 以表单形式返回结果 -------------------------------------------------- | t1 | t2 | -------------------------------------------------- | 6

两个查询使用相同的表(此处:test)

第一个问题:

SELECT `test` as t1, COUNT( * ) as t2
FROM  `test_table`
WHERE  `test` > 5
GROUP BY `test`
以表单形式返回结果

--------------------------------------------------
| t1 | t2 |
--------------------------------------------------
|  6 |  2 |
--------------------------------------------------
|  8 |  7 |
--------------------------------------------------
--------------------------------------------------
| t3      |
--------------------------------------------------
| 40.456% |
--------------------------------------------------
| 59.544% |
--------------------------------------------------
第二个问题:

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
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
以表单形式返回结果

--------------------------------------------------
| t1 | t2 |
--------------------------------------------------
|  6 |  2 |
--------------------------------------------------
|  8 |  7 |
--------------------------------------------------
--------------------------------------------------
| t3      |
--------------------------------------------------
| 40.456% |
--------------------------------------------------
| 59.544% |
--------------------------------------------------
我想要的是:

--------------------------------------------------
| t1 | t2 | t3 |
--------------------------------------------------
|  6 |  2 | 40.456% |
--------------------------------------------------
|  8 |  7 | 59.544% |
--------------------------------------------------
我怎么做?Union将t3结果放在t1和t2下面,也许是join语句?但是加入什么?或者我可以从这两个查询中选择所有数据吗

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;
试试上面的代码


希望这将对您有所帮助。

这可以通过对第二个查询进行一些修改来完成:

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

根据示例中的结构方式,您应该能够在test_table.test(您正在使用的Group By on字段)中将它们连接起来。

在select中使用子查询可以使其非常可读

   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)

你从哪里得到40.456分。2/9*100=22.222?@P.Salmon我没有得到40.456。我写了“以形式返回结果”,意思是有一个小数点后三位的数字。你可以想象我的表中没有两行,但有很多行,所以我只是举了一个例子。下一次,请看:为什么你甚至需要一个连接?我是否遗漏了问题中的一些微妙之处?