【问题标题】:How to reuse calculated field without subqueries but with group by如何在没有子查询但使用 group by 的情况下重用计算字段
【发布时间】:2015-02-26 01:29:53
【问题描述】:

假设我有一个带有 item_id 字段的 table1 查询

select item_id + 1 as num1, (select num1) + 1 as num2 from table1

有效,但查询

select count(*) as num1, item_id, (select num1) + 1 as num2 from table1 group by item_id

失败,错误代码:1247。不支持引用“num1”(引用组函数)。

我知道我可以嵌套一个计算小计的查询,并在外部查询中使用它,但是使用 CakePHP 处理嵌套/临时表很麻烦。我不能使用用户变量 (@num1 := count(*)),因为我需要在同一个 select 语句中重用数据,并且读/写的顺序是未定义的。有人知道解决这个问题的简单方法吗?

【问题讨论】:

  • 你想用CakePHP语法写什么SQL语句?
  • @AgRizzo 实际查询非常复杂。我知道有几种方法可以解决我的问题中的问题,但是它们都很混乱,由于 CakePHP 处理临时表的方式,它们变得更加复杂。我真的只是问这个问题是为了让我的代码更具可读性

标签: mysql cakephp


【解决方案1】:
SELECT  num1,
        item_id, 
        num1 + 1 AS num2
    FROM  
      ( SELECT  COUNT(*) AS num1, 
                item_id
            FROM  table1
            GROUP BY  item_id 
      ) AS t;

【讨论】:

  • 我特别提到我不是在寻找使用子查询的答案。对于单个计算字段,这样做没什么大不了的,但是对于基于其他计算字段的计算字段,它会变得非常混乱。不过感谢您的尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多