Mysql group rows

不羁的心 提交于 2019-12-25 01:53:23

问题


I have a table with: Id (id of rider) Time (is the time that he has done) Session (number session where the time was done)

idlap   idRider session time
1        45652    1      4
2        54645    1      2
3        45652    2      2
4        54582    2      1
5        51284    1      3
6        54582    1      3
7        54645    2      4
8        51284    2      5
9        54582    2      2

I wonder how to query in mysql a result like:

idRider   |fast sesion   |  count laps
45652     |     2        |     1
54645     |     1        |     1
51284     |     3        |     1
54582     |     2        |     2

The query should return in wich session the rider got the best time(fast session) and count the number of laps (done in the fast session) grouped by idRider. Thank you.


回答1:


This query will give you the results that you want. It JOINs the laps table to the minimum time and number of laps per rider per session, and then to the minimum time per rider to get the fastest session:

SELECT l.idRider, l.session, l.time, s.numlaps
FROM laps l
JOIN (SELECT idRider, `session`, MIN(time) AS fastest, COUNT(*) AS numlaps
      FROM laps
      GROUP BY idRider, `session`) s ON s.idRider = l.idRider AND s.session = l.session AND s.fastest = l.time
JOIN (SELECT idRider, MIN(time) AS fastest
      FROM laps
      GROUP BY idRider) f ON f.idRider = s.idRider AND f.fastest = s.fastest
ORDER BY idRider

Output:

idRider session time    numlaps
45652   2       2       1
51284   1       3       1
54582   2       1       2
54645   1       2       1

Demo on dbfiddle




回答2:


you can use MIN sql syntax like this

    SELECT `idRider`, MIN(`time`) as `fast session`,`session` as `count lap` 
      FROM `race` 
  GROUP BY `idRider` 
  ORDER BY `session`;


来源:https://stackoverflow.com/questions/58161160/mysql-group-rows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!