当至少一半的记录被评估为'Y'时选择数据

时间:2013-04-20 22:37:36

标签: sql oracle

我有这张桌子

evaluation([id_member, id_article], opinion)

我尝试选择id_article,而至少有一半的成员为'Y'设置了意见。

例如:

(1, 1, NULL)
(2, 1, NULL)
(1, 2, NULL)
(2, 2, 'Y')

查询应该选择第2条(第二篇文章),因为这两行中有一行包含'Y'。

我找不到怎么做!

[]表示id_memberid_article构成主键。

3 个答案:

答案 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;