加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Sql Query – 限制查询结果

发布时间:2021-03-05 08:18:19 所属栏目:编程 来源:网络整理
导读:我很确定我们不能将LIMIT子句用于我想做的工作 – 以是我想找到是否有其他要领可以实现这一点. 我有一个表,用于捕捉哪个用户会见了哪个市肆.每次用户会见市肆时,城市在此表中插入一行. 有些规模是 shopping_id(主键) store_id user_id 此刻我想要的是 – 对付

我很确定我们不能将LIMIT子句用于我想做的工作 – 以是我想找到是否有其他要领可以实现这一点.

我有一个表,用于捕捉哪个用户会见了哪个市肆.每次用户会见市肆时,城市在此表中插入一行.

有些规模是

> shopping_id(主键)
> store_id
> user_id

此刻我想要的是 – 对付一组给定的市肆,找到最多会见市肆的前5位用户.

我可以一次做1个市肆:

select store_id,user_id,count(1) as visits 
from shopping 
where store_id = 60
group by user_id,store_id 
order by visits desc Limit 5

这将给我5个用户会见store_id = 60的最大次数

我想要做的是提供10个store_ids的列表,并为每个市肆提取已会见该市肆最多倍的5个用户

select store_id,count(1) as visits 
from shopping 
where store_id in  (60,61,62,63,64,65,66)
group by user_id,store_id 
order by visits desc Limit 5

这不起浸染,由于最后的限定将为每个市肆仅返回5行而不是5行.

关于怎样实现这一方针的任何设法.我老是可以写一个轮回并一次转达1个市肆,但想知道是否有更好的要领

办理要领

行使两个用户变量并计较沟通的持续store_id,您可以用您想要的任何限定替代< = 5
SELECT a.*
FROM (
 SELECT store_id,count(1) as visits 
 FROM shopping
 WHERE store_id IN (60,66)
 GROUP BY store_id,user_id
 ORDER BY store_id,visits desc,user_id
) a,(SELECT @prev:=-1,@count:=1) b
WHERE
 CASE WHEN @prev<>a.store_id THEN
   CASE WHEN @prev:=a.store_id THEN
    @count:=1
   END
 ELSE
   @count:=@count+1
 END <= 5

按照要求编辑一些表明:

第一个子查询(a)是对数据举办分组和排序的子查询,因此您将得到如下数据:

store_id | user_id | visits
---------+---------+-------
 60           1       5
 60           2       3
 60           3       1
 61           2       4
 61           3       2

第二个子查询(b)用-1和@count初始化用户变量@prev

然后我们从子查询中选择全部数据(a)验证案例中的前提.

>验证我们看到的先前store_id(@prev)与当前store_id差异.
因为第一个@prev便是-1,因此没有任何对象与当前store_id匹配,因此前提<>是的,我们输入的是第二种环境,它只是用当前的store_id变动值@prev.这是能力,以是我可以在沟通的前提下变动两个用户变量@count和@prev.
>假如前一个store_id便是@prev,则只增进@count变量.
>我们搜查计数是否在我们想要的值之内,因此< = 5
以是用我们的测试数据:

step | @prev | @count | store_id | user_id | visits
-----+-------+--------+----------+---------+-------
  0      -1      1    
  1      60      1        60          1        5 
  2      60      2        60          2        3
  3      60      3        60          3        1
  4      61      1        61          2        4
  5      61      2        61          3        2

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读