我试图将计算字段(在该示例中称为CALC_TIPS)除以给定某个COMM_TYPE_ID的计算字段的平均值。通过此查询,我可以为每个COMM_TYPE_ID提取AVG。
SELECT AVG(CALC_TIPS), COMM_TYPE_ID
FROM (SELECT tips_amount/COMMUNICATIONS_ID AS CALC_TIPS, COMM_TYPE_ID
FROM consumer_action_log) AS cal
GROUP BY COMM_TYPE_ID;
然后我如何返回并将CALC_TIPS字段中的每个值除以其COMM_TYPE_ID的平均值?我目前不知所措。提前谢谢!
注意:我正在使用MySQL 另请注意:我知道子查询不是必需的。我使用此查询作为更复杂查询的代理,我必须做同样的事情。
答案 0 :(得分:1)
解决方案是将派生表连接回密钥COMMS_TYPE_ID上的某些数据。如果外部和内部查询都是多表和大的话,那就不太好了。
SELECT tips_amount/COMMUNICATIONS_ID/NULLIF(AVG_TIP,0)
FROM consumer_action_log A # return to table consumer_action_log
INNER JOIN (
SELECT AVG(CALC_TIPS) AVG_TIP, COMM_TYPE_ID
FROM (
SELECT tips_amount/COMMUNICATIONS_ID AS CALC_TIPS, COMM_TYPE_ID
FROM consumer_action_log) AS cal
GROUP BY COMM_TYPE_ID
) B ON A.COMM_TYPE_ID = B.COMM_TYPE_ID
NULLIF的原因是转0 - > NULL,以便您不会被零除错。
答案 1 :(得分:1)
有两个子查询:
select cal1.calc_tips/cal2.avgCalc_Tips as theAnswer
from (Select tips_amount/communication_id as calc_tips
, comm_type_id
from consumer_action_log) cal1
JOIN (select avg(tips_amount/communication_id) as avgCalcTips
, comm_type_id
from consumer_action_log
group by comm_type_id
from consumer_action_log) cal2
ON cal1.comm_type_id = cal2.comm_type_id
编辑:当然假设communication_id永远不为零:)