组合数据mysql查询

yzuktlbb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(225)

我有这张table:2019年特拉菲科

(
  Id    int,
  PAÍS  varchar(255),
  FLUJO varchar(255),
  `PUERTO PENINSULAR`   varchar(255),
  `GRUPO ESTADÍSTICO`   varchar(255),
  NATURALEZA    varchar(255),
  TONELADAS double
)

其中我需要选择不同类型的流量(在下面的查询中分组的变量组合)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”高于第二个查询阈值条件的记录:具有这些相等变量“flujo”、“naturaleza”abd'grupo estad的记录的avg(toneladas)/4í粘贴并查询表中满足条件的所有记录,即它们的“toneladas”字段大于第二个查询的阈值(q2)。我尝试组合q1和q2查询,但没有成功。欢迎提供任何帮助。事先非常感谢。

gzszwxb4

gzszwxb41#

如果要从第一个查询中筛选出行,则需要添加 WHERE 条款,当然。棘手的部分是,要过滤的值需要作为另一个查询的结果来计算。
现在,解决方案是将另一个查询计算为表表达式( f 然后将它与第一个查询连接起来。一旦这样做了,编写过滤条件就很简单了,因为两个值现在都在同一范围内。
例如:

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`

相关问题