0

我有这张桌子

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构成主键。

4

3 回答 3

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
于 2013-04-20T22:56:13.673 回答
0

这是使用having子句的绝佳机会。

select blah, blah, blah
from evaluation join other tables as required
where whatever
having (sum(opinion) / count(*)) * 100 > 50
于 2013-04-20T22:44:58.830 回答
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;
于 2013-04-21T07:57:37.767 回答