获取最受欢迎的商品相对容易。但是,我们假设我有一个包含两列的表:item_id
和viewer_id
。
给定一个viewer_id
,我想获取前X个item_id行,这些行已经被查看过了很多次并且没有被给定的viewer_id
查看过。例如:
item_id | viewer_id
A | 1
A | 3
C | 2
C | 3
C | 4
D | 5
获取观众2看不到的最受欢迎的项目应该返回A,D。
有什么好办法可以解决这个问题?
答案 0 :(得分:0)
下面的内容应该有效:
SELECT t.item_id, COUNT(t.viewer_id) AS view_count FROM table t
WHERE t.item_id NOT IN (SELECT DISTINCT item_id FROM table t2 WHERE viewer_id = your_viewer_id)
GROUP BY item_id
ORDER BY view_count DESC
答案 1 :(得分:0)
试试这个:
select item_id, count(*) as timesViewed from t2
where item_id not in (
select distinct t1.item_id from t1
where viewer_id = 2
)
group by item_id
order by timesViewed desc
工作example
答案 2 :(得分:0)
根据我的理解,你不仅要列出它们,而且要求从大多数到最不受欢迎;这应该有效。
SELECT item_id
FROM table_name a
WHERE NOT EXISTS
(
SELECT viewer_id FROM table_name t
WHERE a.item_id=t.item_id AND t.viewer_id=2
)
GROUP BY item_id
ORDER BY COUNT(item_id) DESC;