我有这张桌子
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
构成主键。
答案 0 :(得分:5)
如果意见是字符串:
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
答案 1 :(得分:0)
这是使用having子句的绝佳机会。
select blah, blah, blah
from evaluation join other tables as required
where whatever
having (sum(opinion) / count(*)) * 100 > 50
答案 2 :(得分:0)
这是一种使用不太受欢迎的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;