3
对我的问题summarizing-two-conditions-on-the-same-sql-table跟进的引用MySQL的别名,我添加的比例列,它是一个简单的SUM(...)列由第二SUM(...)柱分为:聚合列
SELECT
COMPANY_ID,
SUM(CASE WHEN STATUS IN (0, 1) THEN 1 ELSE 0 END) AS NON_BILLABLE,
SUM(CASE WHEN STATUS IN (2, 3) THEN 1 ELSE 0 END) AS BILLABLE
SUM(NON_BILLABLE)/SUM(BILLABLE) AS RATIO
FROM TRANSACTIONS
GROUP BY COMPANY_ID
它看起来不错,很干净,可以定义这样的RATIO,但显然forbidden by SQL。
为了让查询起作用,我只复制了NON_BILLABLE和BILLABLE的CASE语句。
SELECT
COMPANY_ID,
SUM(CASE WHEN STATUS IN (0, 1) THEN 1 ELSE 0 END) AS NON_BILLABLE,
SUM(CASE WHEN STATUS IN (2, 3) THEN 1 ELSE 0 END) AS BILLABLE
SUM(CASE WHEN STATUS IN (0, 1) THEN 1 ELSE 0 END)/SUM(CASE WHEN STATUS IN (2, 3) THEN 1 ELSE 0 END) AS RATIO
FROM TRANSACTIONS
GROUP BY COMPANY_ID
是否有更好,更干净(非冗余)的方式来编写此查询?
的问题是,你不能访问您查询的选择子句中的别名('NON_BILLABLE'和'BILLABLE')。您只能在WHERE或HAVING子句中引用它们。 您*可能*能够用左连接或其他东西来绑定它,但我不确定。 – keithjgrant 2009-11-24 18:06:52
根据http://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error你不能在标准SQL中的WHERE子句中访问它们。 – 2009-11-24 18:39:03
啊,对!在WHERE子句中只能访问表别名。 – keithjgrant 2009-11-24 18:46:00