mysql - 错误 1054:having 子句与 id 分组的子查询连接

标签 mysql sql mysql-error-1054 mysql-5.5

得到这个查询:

select 
T.id_empresa, max(periodo) as ultimoPeriodo, ( 
                        select sum(monto) from cuotasindical.pagos
                        where id_empresa = T.id_empresa and periodo = max(T.periodo)
                       ) as ultimoMonto, 
min(periodo) as periodoAnterior, (
                  select sum(monto) from cuotasindical.pagos
                  where id_empresa = T.id_empresa and periodo = min(T.periodo)
                   ) as anteriorMonto
from 
  (
    select 
    P1.id_empresa, P1.periodo, sum(monto) as monto
    from cuotasindical.pagos P1
    where P1.id_empresa in (select id_empresa from cuotasindical.empresa where id_delegacion = 5)
    group by P1.id_empresa, P1.periodo
    having P1.periodo in (
                select * from (
                                select periodo
                                from cuotasindical.pagos  
                                where P1.id_empresa = id_empresa order by periodo desc limit 2
                            ) as L
               )
    and count(distinct P1.periodo) > 1
  ) T
group by id_empresa
having (abs(max(monto) - min(monto))*100/
                    (
                      select sum(monto) from cuotasindical.pagos T2
                      where T2.id_empresa = id_empresa and T2.periodo = max(periodo)
                    ) > 10);

需要比较每个 empresa 的最后两个 pagos(按 periodo 排序),看看它们的差异是否大于或小于百分比(在本例中为 10)

我明白了

Error Code: 1054. Unknown column 'P1.id_empresa' in 'where clause'

唯一进行比较的 where 子句是带有限制的子查询

having P1.periodo in (
                select * from (
        select periodo
        from cuotasindical.pagos  
        where P1.id_empresa = id_empresa 
        order by periodo desc limit 2
        ) as L
               )
    and count(distinct P1.periodo) > 1

双子查询是为了避免 IN 子句中的限制 2(在 this 链接上获取)

为什么我会收到这个错误?我认为我可以在having子句的子查询中加入group by之后(就像where子句一样)

或者我遗漏了一个错误?

提前致谢

最佳答案

问题在于 mysql 在子查询中只有一层深范围。

我也有子查询限制的问题,所以,我做什么 wasp>

    ..having P1.periodo in 
    (
       select max(periodo) as periodo
       from cuotasindical.pagos H
       where P1.id_empresa = id_empresa 
    ) OR
    P1.periodo in (
       select max(periodo) as periodo
       from cuotasindical.pagos H
       where P1.id_empresa = id_empresa and periodo != P1.periodo
    )
and count(distinct P1.periodo) > 1

关于mysql - 错误 1054:having 子句与 id 分组的子查询连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952268/

相关文章:

mysql - SQL查询问题

php - 帮忙设计简单的2表数据库吗?

sql - SCOPE_IDENTITY() 的同步问题

php - 'xyz' 中的未知列 'where clause'

sql - 使用总和将 SQL 表行转为 3 列

mysql - 在 SQL 中,WHERE 子句的顺序有什么影响吗?

Mysql子查询问题

mysql - 为什么Vertrigo 2.21(MySQL服务器无法启动)在Windows 7下无法运行?

用户的 PHP/MYSQL 日期时间范围重叠

php - 查询和表 - MAX 和 Join