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