代码之家  ›  专栏  ›  技术社区  ›  Eric J.

引用聚合列的mysql别名

  •  4
  • Eric J.  · 技术社区  · 15 年前

    跟进我的问题 summarizing-two-conditions-on-the-same-sql-table ,我添加了一个比率列,它只是一个和(…)列除以第二个和(…)列:

    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
    

    像这样定义比例看起来很好也很干净,但也很明显 forbidden by SQL .

    为了使查询正常工作,我只复制了非计费和计费的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
    

    有没有更好、更干净(非冗余)的方法来编写这个查询?

    1 回复  |  直到 15 年前
        1
  •  4
  •   OMG Ponies    15 年前

    用途:

    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