合并mysql查询
我有许多要求稍有不同的查询,它们将与负载测试一起使用,因此降低查询调用的数量会更好。我想一定有办法将查询重新排列成一个大的查询 以下是我正在使用的数据功能的简化版本 查询1限额场景:合并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'
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