【问题标题】:How do I use a calculated column in a WHERE clause?如何在 WHERE 子句中使用计算列?
【发布时间】:2011-07-13 00:18:10
【问题描述】:

我正在尝试计算我的数据库中某些产品的总容量,我正在尝试列出所有容量为 3000 或更多的产品....

所以我做了这样的查询:

SELECT (
products_width * products_height * products_length
) AS total_volume
FROM `price`
where total_volume > 3000

但我收到一条错误消息,指出 where 子句中不存在“total_volume”列,您能告诉我如何解决这个问题吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT (
    products_width * products_height * products_length
    ) AS total_volume
    FROM `price`
    HAVING total_volume >= 3000
    

    就是 - 将 WHERE 更改为 HAVING,仅此而已。

    【讨论】:

    • 这不会给出想要的结果。
    • 是的,当然你是对的......不是“分组”,而是“有”......我的头在哪里!
    • 现在更新了,不过和你的回答一样,Krtek。
    【解决方案2】:

    您需要在 WHERE 中重复该公式:

    SELECT (products_width * products_height * products_length) AS total_volume
        FROM `price`
        where (products_width * products_height * products_length) > 3000
    

    【讨论】:

    • 如果公式可能发生变化,这将导致可维护性问题,使用having或子查询是解决此问题的更好方法。
    • 这个解决方案是标准的sql,所以可以移植到其他DBMS,虽然它有@krtek所说的可维护性问题。
    【解决方案3】:

    试试:

    SELECT (
    products_width * products_height * products_length
    ) AS total_volume
    FROM `price`
    having total_volume > 3000
    

    select *
    from (
        SELECT (
            products_width * products_height * products_length
        ) AS total_volume
        FROM `price`
    )
    where total_volume > 3000
    

    为了说明,不能直接在where子句中使用total_volume,因为它是在查询的选择部分创建的。在这种情况下可以使用having,也可以使用子查询。

    【讨论】:

    • 我喜欢 HAVING 的解决方案,它非常干净,谢谢!
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多