2009-11-24 3 views
3

Вслед за мой вопрос summarizing-two-conditions-on-the-same-sql-table, я добавил колонку RATIO, что это просто один SUM (...) колонка делится на колонке второго SUM (...):Referencing MySQL Псевдоним агрегатного Колонка

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.

Чтобы получить запрос на работу, я просто скопировал операторы CASE для NON_BILLABLE и BILLABLE.

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 

Есть ли лучший, чистый (не избыточный) способ написать этот запрос?

+0

Проблема заключается в том, что вы не можете получить доступ к псевдонимами ('' NON_BILLABLE' и BILLABLE') внутри выбора пункта вашего запроса. Вы можете ссылаться только на них в предложениях WHERE или HAVING. Вы можете * приспособить его к левому соединению или чему-то еще, но я не уверен. – keithjgrant

+2

Согласно http://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error, вы не можете получить к ним доступ в предложениях WHERE в стандартном SQL , –

+0

Ах, верно! В предложении WHERE доступны только псевдонимы таблиц. – keithjgrant

ответ

4

Использование:

SELECT x.company_id, 
     x.non_billable, 
     x.billable, 
     x.non_billable/x.billable AS RATIO 
    FROM (SELECT t.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 
     FROM TRANSACTIONS 
    GROUP BY t.company_id) x 
Смежные вопросы