Ссылка на MySQL псевдоним совокупного столбца

В ответ на мой вопрос -sql-table, я добавил столбец RATIO, который представляет собой просто один столбец 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 таким образом, но также очевидно запрещено 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

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


person Eric J.    schedule 24.11.2009    source источник
comment
Проблема в том, что вы не можете получить доступ к псевдонимам (NON_BILLABLE и BILLABLE) внутри предложения select вашего запроса. Вы можете ссылаться на них только в предложениях WHERE или HAVING. Вы возможно сможете настроить его с помощью левого соединения или чего-то еще, но я не уверен.   -  person keithjgrant    schedule 24.11.2009
comment
Согласно stackoverflow.com/questions/942571/, вы не можете получить к ним доступ в предложениях WHERE в стандартном SQL.   -  person Eric J.    schedule 24.11.2009
comment
Ах, точно! В предложении WHERE доступны только псевдонимы таблиц.   -  person keithjgrant    schedule 24.11.2009


Ответы (1)


Использовать:

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
person OMG Ponies    schedule 24.11.2009