繁体   English   中英

结合数据mysql查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM