【问题标题】:use join count in calculation in select在选择中的计算中使用连接计数
【发布时间】:2014-10-28 07:06:19
【问题描述】:
SELECT e.qty * e.unit_cost * e.unit_no * (e.factor/100) AS Ext_price, c.cost_type, c.cost_dt, c.internal_cost_amt, c.client_cost_amt
FROM equipment e
LEFT JOIN CostAllocation c ON (c.object_row_id = e.row_id)

我现在想将Ext_price 除以与设备行匹配的CostAllocation 行数。我该怎么做?

【问题讨论】:

  • 你能用这个select返回COUNT(c.object_row_id)并在客户端上做吗?

标签: mysql sql join count


【解决方案1】:
SELECT e.qty*e.unit_cost*e.unit_no*e.factor/(100*x.cnt) AS Ext_price,
       c.cost_type,
       c.cost_dt,
       c.internal_cost_amt,
       c.client_cost_amt
FROM equipment e
LEFT JOIN CostAllocation c ON c.object_row_id = e.row_id
LEFT JOIN
  (SELECT row_id,
          count(*) cnt
   FROM CostAllocation
   GROUP BY row_id) x ON c.object_row_id = x.row_id

【讨论】:

    【解决方案2】:

    试试下面:

    select  g.*,g.Ext_price/(select count(*) from CostAllocation k where k.object_row_id=g.row_id) as youranswer
    from 
    (
    SELECT e.row_id,e.qty*e.unit_cost*e.unit_no*e.factor/100 AS Ext_price, c.cost_type, c.cost_dt, c.internal_cost_amt, c.client_cost_amt
    FROM equipment e
    LEFT JOIN CostAllocation c ON c.object_row_id = e.row_id)g
    

    【讨论】:

      【解决方案3】:

      由于 mysql 不支持分析功能,因此添加子查询(未经测试)可能是最简单的:

      SELECT Ext_price, cost_type, cost_dt, internal_cost_amt
           , client_cost_amt
           , Ext_price / ( nullif( (select count(1) 
                                    from CostAllocation c2
                                    where c2.object_row_id = e.row_id), 0) )
      FROM (
          SELECT e.qty*e.unit_cost*e.unit_no*e.factor/100 AS Ext_price
               , c.cost_type, c.cost_dt, c.internal_cost_amt, c.client_cost_amt
          FROM equipment e
          LEFT JOIN CostAllocation c 
              ON c.object_row_id = e.row_id
      ) as T
      

      我添加了 nullif 以避免被零除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多