查询以计算在前几行中发生的数字计数

时间:2019-07-08 20:36:06

标签: mysql sql

我有一个这样的表格视图:

Id, Picks
5, 1
5, 5
5, 10
5, 20

4, 8
4, 10
4, 11
4, 22

3, 1
3, 8
3, 10
3, 25

2, 3
2, 5
2, 23
2, 24

1, 14
1, 17
1, 20
1, 24

,带有两列ID和Picks。每次抽奖将id重复四次,在1-25之间有4个数字。

我想显示在前3次抽奖中出现的每个抽奖编号的计数。因此,对于ID = 5的开奖号码,如果这些号码在ID为4,3和2的开奖中出现一次,则将其计算在内。

因此对于上面的示例,计数将如下所示:

Id, Count
5,  3
4,  2
etc.

如何通过mysql查询获得此结果?表格视图没有唯一的ID。

2 个答案:

答案 0 :(得分:3)

我想您需要类似的东西

select
  a.id, count(distinct b.picks)
from my_table a
join my_table b on b.picks = a.picks
               and b.id between a.id - 3 and a.id - 1
group by a.id

答案 1 :(得分:2)

具有EXISTS:

select 
  t.id,
  sum(
    case when exists (
        select 1 from tablename 
        where (id between t.id - 3 and t.id - 1) and picks = t.picks
      ) then 1
      else 0
    end
  ) counter
from tablename t 
group by t.id
order by t.id desc

请参见demo
结果:

| id  | counter |
| --- | ------- |
| 5   | 3       |
| 4   | 2       |
| 3   | 0       |
| 2   | 1       |
| 1   | 0       |