Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并mysql查询_Mysql_Sql_Subquery - Fatal编程技术网

合并mysql查询

合并mysql查询,mysql,sql,subquery,Mysql,Sql,Subquery,我有许多要求稍有不同的查询,它们将与负载测试一起使用,因此降低查询调用的数量会更好。我想一定有办法将查询重新排列成一个大的查询 以下是我正在使用的数据功能的简化版本 查询1限额场景: SELECT SUM(f_total_ftg>=2) as ftg_2_plus FROM (SELECT * FROM results WHERE (f_player1='arcos' OR f_player2='arcos') AND (f_player1='skromnuy'

我有许多要求稍有不同的查询,它们将与负载测试一起使用,因此降低查询调用的数量会更好。我想一定有办法将查询重新排列成一个大的查询

以下是我正在使用的数据功能的简化版本

查询1限额场景:

    SELECT SUM(f_total_ftg>=2) as ftg_2_plus FROM 
    (SELECT * FROM results WHERE (f_player1='arcos' OR f_player2='arcos') 
    AND (f_player1='skromnuy' OR f_player2='skromnuy') 
    AND f_total_ftg IS NOT NULL AND f_datetime < '2020-07-26 00:54:00' 
    ORDER BY f_datetime DESC LIMIT 10) as x
SELECT SUM(f_total_ftg>=2) as ftg_2_plus FROM 
(SELECT * FROM results WHERE (f_player1='arcos' OR f_player2='arcos') 
AND (f_player1='skromnuy' OR f_player2='skromnuy') 
AND f_total_ftg IS NOT NULL AND f_datetime < '2020-07-26 00:54:00' 
ORDER BY f_datetime DESC) as x
SELECT SUM(f_total_ftg>=2) as ftg_2_plus FROM 
(SELECT * FROM results WHERE (f_player1='arcos' OR f_player2='arcos') 
AND (f_player1='skromnuy' OR f_player2='skromnuy') 
AND f_total_ftg IS NOT NULL AND f_datetime BETWEEN '2020-07-26 00:54:00' - INTERVAL 1 DAY AND '2020-07-26 00:54:00' 
ORDER BY f_datetime DESC) as x
我不确定如何安排子查询以适应这些场景

我想从中得到3列:

ftg_2_plus_no_limit
ftg_2_plus_no_limit
ftg_2_plus_date_range

您可以使用cteCommon表表达式来解决此问题

with cte_base as (
SELECT * FROM results WHERE 
    (f_player1='arcos' OR f_player2='arcos') 
    AND (f_player1='skromnuy' OR f_player2='skromnuy') 
    AND f_total_ftg IS NOT NULL
    AND f_total_ftg >=2
    ORDER BY f_datetime DESC)
SELECT (SELECT SUM(f_total_ftg) FROM cte_base 
where f_datetime < '2020-07-26 00:54:00' limit 10) as ftg_2_plus_limit,
(SELECT SUM(f_total_ftg) FROM cte_base 
where f_datetime < '2020-07-26 00:54:00') as ftg_2_plus_no_limit,
SELECT SUM(f_total_ftg) FROM cte_base 
where f_datetime BETWEEN '2020-07-26 00:54:00' - INTERVAL 1 DAY 
AND '2020-07-26 00:54:00') as ftg_2_plus_date_range

您可以使用交叉连接和调整求和条件将查询合并到一个查询中

select r1.ftg_2_plus_limit,
       sum(r.f_total_ftg>=2 and f_datetime < '2020-07-26 00:54:00') ftg_2_plus_no_limit,
       sum(r.f_total_ftg>=2 and f_datetime between '2020-07-26 00:54:00' - interval 1 day and '2020-07-26 00:54:00') ftg_2_plus_date_range
from results r
cross join (
    select sum(f_total_ftg>=2) ftg_2_plus_limit
    from results
    where (f_player1='arcos' or f_player2='arcos') 
        and (f_player1='skromnuy' or f_player2='skromnuy') 
        and f_total_ftg is not null
        and f_datetime < '2020-07-26 00:54:00' 
    order by f_datetime desc 
    limit 10
) r1
where (f_player1='arcos' or f_player2='arcos') 
    and (f_player1='skromnuy' or f_player2='skromnuy') 
    and f_total_ftg is not null