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
組成主鍵。
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
非常感謝:) – mpluse 2013-04-20 23:02:05
只有一個問題:我可以使用'AND id_article IN'其他SELECT?對不起,我沒有dbms來測試。 – mpluse 2013-04-20 23:04:30
不,你必須做的是在where子句中......表名後 和GROUP BY子句之前然後寫 WHERE id_article IN(SELECT ...) 然而,在大多數情況下,我會推薦使用 WHERE EXISTS(SELECT * FROM sometable where wheretable.id_Article = Evaluation.id_Article) – 2013-04-20 23:06:53
下面是一個方法,用於效率使用低估的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;
「views」列是「NUMBER」還是「VARCHAR2」?你的樣本數據是數字的,你的問題的文本是關於一個字符的字符串('Y'或'N'),而你的問題的主題是關於多個字符的字符串,比如'Yes'。哪三個是正確的? – 2013-04-20 22:47:14
我已經看過我的代碼了。 「意見」是「Y」或「NULL」 – mpluse 2013-04-20 22:53:17
好的。那麼你可以更新你的樣本數據嗎? – 2013-04-20 22:55:59