[英]Sql query - selecting top 5 rows and further selecting rows only if User is present
我有點固執於如何實現此查詢-這與我之前發布的查詢非常相似,但我無法破解它。
我有一個購物桌,每當用戶購買任何東西時,都會插入一條記錄。
一些領域是
* shopping_id (primary key)
* store_id
* user_id
現在,我只需要拉出他在前5名訪客中的那些商店的列表即可:
當我分解它時,這就是我想要完成的工作:
* Find all stores where this UserA has visited
* For each of these stores - see who the top 5 visitors are.
* Select the store only if UserA is among the top 5 visitors.
相應的查詢將是:
select store_id from shopping where user_id = xxx
select user_id,count(*) as 'visits' from shopping where store_id in (select store_id from shopping where user_id = xxx) group by user_id order by visits desc limit 5
現在,我需要在此結果集中檢查UserA是否存在,並僅在他存在時選擇該存儲。 例如,如果他去過一家商店5次-但是如果有5個或更多的人去過該商店5次以上,則不應選擇該商店。
所以我有點迷路了。
謝謝你的幫助
這應該做。 它使用中間的VIEW來計算每個用戶在每個商店購物的次數。 另外,假設您在某處有一個store表,其中每個store_id都列出一次。 如果不是這樣,您可以將SELECT store_id FROM stores
更改為SELECT DISTINCT store_id FROM shopping
以達到相同的效果,但效果較慢。
CREATE VIEW shop_results (store_id, user_id, purchase_count) AS
SELECT store_id, user_id, COUNT(*)
FROM shopping GROUP BY store_id, user_id
SELECT store_id FROM stores
WHERE 'UserA' IN
(SELECT user_id FROM shop_results
WHERE shop_results.store_id = stores.store_id
ORDER BY purchase_count DESC LIMIT 5)
您可以通過將SELECT的SELECT放在子查詢中,將它們組合成一個查詢,但是我認為這種方式更容易閱讀,而且很可能確實希望在系統中的其他地方聚集這些信息。在視圖中只定義一次,而不是在多個查詢中重復一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.