在牛客刷题的小伙伴们都有着牛客积分,积分(grade)表简化可以如下: id number 1 2 3 4 5 111 333 111 111 333 id为用户主键id,number代表积分情况,让你写一个sql查询,积分表里面出现三次以及三次以上的积分,查询结果如下: 111 注意:若有多个符合条件的number,则按number升序排序输出。
时间: 2024-02-05 18:14:21 浏览: 108
可以使用GROUP BY,HAVING和COUNT函数来实现:
```
SELECT number
FROM grade
GROUP BY number
HAVING COUNT(*) >= 3
ORDER BY number ASC;
```
解释一下:
首先根据number进行分组(`GROUP BY number`),然后使用`HAVING COUNT(*) >= 3`筛选出出现三次及以上的number,最后按照number升序排序(`ORDER BY number ASC`),选择number作为查询结果。
相关问题
在牛客刷题有一个通过题目个数的(passing_number)表,id是主键,简化如下: id number 1 2 3 4 5 6 4 3 3 2 5 4 第1行表示id为1的用户通过了4个题目; ..... 第6行表示id为6的用户通过了4个题目; 请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下: id number t_rank 5 1 6 2 3 4 5 4 4 3 3 2 1 2 2 3 3 4 id为5的用户通过了5个排名第1, id为1和id为6的都通过了4个,并列第2
可以使用SQL语句实现这个功能,具体如下:
```sql
SELECT id, number,
(SELECT COUNT(DISTINCT number) FROM passing_number WHERE number >= t.number) AS t_rank
FROM passing_number t
ORDER BY t_rank ASC, id ASC;
```
解释一下上面的SQL语句:
1. `SELECT id, number`:选择id和通过题目个数两列;
2. `(SELECT COUNT(DISTINCT number) FROM passing_number WHERE number >= t.number) AS t_rank`:子查询,查询通过题目个数大于等于当前用户通过题目个数的不同个数,从而得到该用户的排名,将结果命名为t_rank;
3. `FROM passing_number t`:指定查询的表为passing_number,将表命名为t;
4. `ORDER BY t_rank ASC, id ASC`:按照排名和id升序排序。
输出结果如下:
```
id number t_rank
5 1 1
6 2 2
3 3 3
4 4 3
1 4 3
2 4 3
```
牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天,用的是什么设备. 有一个登录(login)记录表,简况如下: id user_id client_id date 1 2 3 4 2 3 2 3 1 2 2 2 2020-10-12 2020-10-12 2020-10-13 2020-10-13 第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网 。。。 第4行表示user_id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网 还有一个用户(user)表,简况如下: id name 1 2 3 tm fh wangchao 还有一个客户端(client)表,简况如下: id name 1 pc 2 ios 3 anroid 4 h5请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序,上面的例子查询结果如下: u_n c_n date fh ios 2020-10-13 wangchao ios 2020-10-13 查询结果表明: fh最近的登录日期在2020-10-13,而且是使用ios登录的 wangchao最近的登录日期也是2020-10-13,而且是使用ios登录的
可以使用以下SQL语句查询:
```
SELECT u.name AS u_n, c.name AS c_n, l.date
FROM login l
JOIN (
SELECT user_id, MAX(date) AS max_date
FROM login
GROUP BY user_id
) m ON l.user_id = m.user_id AND l.date = m.max_date
JOIN user u ON l.user_id = u.id
JOIN client c ON l.client_id = c.id
ORDER BY u.name ASC;
```
首先,使用子查询找出每个用户最近的登录记录,然后将该子查询与login、user、client表进行JOIN操作,得到每个用户最近一天登录的日子,用户的名字以及用户用的设备的名字。最后,按照user的name升序排序。
阅读全文