[英]Combining data mysql query
我有这张桌子: trafico.2019
(
Id int,
PAÍS varchar(255),
FLUJO varchar(255),
`PUERTO PENINSULAR` varchar(255),
`GRUPO ESTADÍSTICO` varchar(255),
NATURALEZA varchar(255),
TONELADAS double
)
我需要 select 不同种类的流量(在以下查询中分组的变量组合)Q1
SELECT distinctrow
FLUJO AS F1,
NATURALEZA AS N1,
`GRUPO ESTADÍSTICO` AS G1,
count(FLUJO) AS cuenta
FROM trafico.`2019`
group by FLUJO, NATURALEZA, `GRUPO ESTADÍSTICO`
所以我知道每种流量组合的记录现在我想设置一个阈值:每种流量平均值的 25%,我通过以下查询 Q2 了解
SELECT distinctrow
FLUJO AS F1,
NATURALEZA AS N1,
`GRUPO ESTADÍSTICO` AS G1,
avg(TONELADAS)/4 AS FILTRO
FROM trafico.`2019`
group by FLUJO, NATURALEZA, `GRUPO ESTADÍSTICO`
我不能做的是:计算第一个查询,但只计算满足条件“TONELADAS”字段高于第二个查询阈值的记录:avg(TONELADAS)/4 of the records with these equal variables“ FLUJO”, “NATURALEZA” abd 'GRUPO ESTADÍSTICO' 并查询表中满足其“TONELADAS”字段大于第二次查询阈值条件的所有记录(Q2)我尝试将两者结合起来 Q1和 Q2 查询,但我没有成功任何帮助都会非常受欢迎。 非常感谢您提前。
如果你想从第一个查询中过滤掉行,你当然需要添加一个WHERE
子句。 棘手的部分是您要过滤的值需要作为另一个查询的结果来计算。
现在,解决方案是将另一个查询计算为表表达式(在本例中为f
),然后将其与第一个查询连接。 一旦你这样做了,编写过滤条件就很简单了,因为这两个值现在都在同一个 scope 中。
例如:
SELECT
t.FLUJO AS F1,
t.NATURALEZA AS N1,
t.`GRUPO ESTADÍSTICO` AS G1,
count(*) AS cuenta
FROM trafico.`2019` t
join (
SELECT
FLUJO,
NATURALEZA,
`GRUPO ESTADÍSTICO`,
avg(TONELADAS) / 4 AS FILTRO
FROM trafico.`2019`
group by FLUJO, NATURALEZA, `GRUPO ESTADÍSTICO`
) f ON f.FLUJO = t.FLUJO
AND f.NATURALEZA = t.NATURALEZA
AND f.`GRUPO ESTADÍSTICO` = t.`GRUPO ESTADÍSTICO`
WHERE t.TONELADAS > f.FILTRO
group by t.FLUJO, t.NATURALEZA, t.`GRUPO ESTADÍSTICO`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.