我有这张桌子
evaluation([id_member, id_article], opinion)
我尝试选择 id_article,而至少有一半的成员对“Y”发表了意见。
例如 :
(1, 1, NULL)
(2, 1, NULL)
(1, 2, NULL)
(2, 2, 'Y')
查询应选择文章 2(用于第二篇文章),因为两行之一包含“Y”。
我找不到怎么做!
[]
表示id_member
并id_article
构成主键。
如果意见是字符串:
SELECT id_article
FROM
Evaluation
GROUP BY id_article
HAVING
AVG(CASE OPINION WHEN 'Y' THEN 1.0 ELSE 0.0 END) >= 0.5
如果意见是十进制的(假设为 0.0 或 1.0),那么
SELECT id_article
FROM
Evaluation
GROUP BY id_article
HAVING
AVG(Opinion) >= 0.5
如果意见是整数(假设为 0 或 1),则
SELECT id_article
FROM
Evaluation
GROUP BY id_article
HAVING
AVG(Opinion*10) >= 5
这是使用having子句的绝佳机会。
select blah, blah, blah
from evaluation join other tables as required
where whatever
having (sum(opinion) / count(*)) * 100 > 50
这是一种使用低估的 ratio_to_report() 分析函数有效获取整行的方法:
select
id_member,
id_article,
opinion
from
(select id_member,
id_article,
opinion,
ratio_to_report(case when opinion 'Y' then 1 else 0 end)
over (partition by id_article) rtr
from evaluation)
where
rtr >= 0.5;