我在下面用这个sql来比较z的值。我把z放在子查询中然后比较它。
我的qn在我下面的else语句中,我想要另外一个公式来计算其他信息仅在另一个名为var1的表中可用的公式(例如,n)。我想把sum(n)/ count(n)作为cv在我的else语句中结束。如果cv>然后做一个案例陈述10然后太大,如果< 10太少了。
我应该在这个子查询中做另一个子查询吗?任何建议请。谢谢!select
z,
CASE
when z > 1 then 'Pls increase your inputs'
when z < -1 then 'Pls decrease your inputs'
else 'No comment' END as Input
from
(select
case
when S < 0 then (S/En-Eg))
else (S/En+Eg))
end as z
from var2);
答案 0 :(得分:3)
你走在正确的轨道上。对于像SUM()和COUNT()这样的聚合,我建议使用相关的子查询;也就是说,子查询保证为每个键值(var1.primary_key)返回一个聚合值(SUM(n)/ COUNT(n))。
例如,此查询使用相关子查询返回所需的值,使SUM(n)/ COUNT(n)可用于外部查询:
SELECT v.z,
CASE WHEN v.z > 1
THEN 'Pls increase your inputs'
WHEN v.z < -1
THEN 'Pls decrease your inputs'
ELSE 'No comment' END AS INPUT,
CASE WHEN v.cv > 10
THEN 'Pls decrease your inputs'
WHEN v.cv < 10
THEN 'Pls increase your inputs'
ELSE 'No comment' END AS INPUT
FROM (SELECT CASE WHEN s < 0
THEN (s / en - eg)
ELSE (S/En+Eg) END AS 'z',
ISNULL(AVG_N.cv, 0) AS 'cv'
FROM var2
INNER JOIN
(
SELECT var1.primary_key AS 'PrimaryKey',
SUM(var1.N) / COUNT(var1.N) AS 'cv'
FROM var1
WHERE var1.primary_key = var2.primary_key
GROUP BY var1.N
) AVG_N
ON AVG_N.PrimaryKey = var2.primary_key
) v