表信息如下:

CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
`login_num` int DEFAULT NULL COMMENT '登录次数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1888 DEFAULT CHARSET=utf8mb3 COMMENT='用户信息表';

部分数据:

思路:(1)先对登陆次数进行降序排序

此时需用到函数:row_number() over(),该函数能对字段进行自增排序后获取最大排序值

select *,
row_number() over(order by login_num desc) as sort
from sys_user;

思路:(2)获取排序最大值,此时该值为该列的总数量

利用子查询,直接把上面的查询语句套进行:

SELECT max(sort)
FROM (select *,
row_number() over(order by login_num desc) as sort
from sys_user) a;

思路:(3)利用四则运算获取前30%的用户信息

利用子查询,直接把思路(1)的查询语句套进行:

select *
from (select *,
row_number() over(order by login_num desc) as sort
from sys_user) a
where sort <= 74 * 0.3;

可以使用类似于Oracle中伪列的用法 select @rownum:=@rownum+1,student.*from (select @rownum:=0) row ,student; 可以看到表中有5条数 数据 select round(count(*)/4) from student mysql 在8.0提供了三个函数进行排名,RANK、DENSE_RANK和ROW_NUMBER函数,如果低于 mysql 8.0需要自己实现 2.RANK、DENSE_RANK和ROW_NUMBER使用 1.rank、dense_rank、row_number函数的使用 (1)创建表语句 CREATE TABLE `score_ranking` ( `rank_id` va... SELECT * FROM table LIMIT 0,99999999999999 这样的确可以解决从任意数取到最后一个数的问题,练习和考试可以通过,但是真正的业务场景由于 数据 很大并不能保证。随意真正解决的方法是: 这里借用牛客的s
: 根据分数查出排行榜(若分数相同,根据得分时间先来后到),并查询出自己的排名,和自己上一名的用户分数信息。 思路: 根据 积分、更新时间、userId 做联合索引。从而根据积分排序直接走索引。 此处注意 mysql 索引默认是正序 排列 ( mysql 8 退出倒序索引,),所以需 根据时间先来后到则是 score DESC,upd_score_dt ASC. 如果排序两 字段 方向不一致则会产生 filesort。 CREATE TABLE `rank` ( `id` cha...
1)查询所有时间内,所有产品销售金额占比,按占比大小降序排序,筛选累计占比在 80%的产品,结果输出排名产品名称销售金额占比累计占比。 2)查询所有时间内,各个国家的销售情况,销售合计金额大于10000视为业绩合格, 否则为不合格,结果输出国家销售金额业绩情况。 3)查询中国、英国每个月份的销售情况,2020年8月份销售合计金额大于10000视为业绩合格,否则为不合格,2020年9月份销售合计金额大于12000视为业绩合格,否则为不合格,结果输出月份中国销售业绩、英国销售业绩。
要更新 MySQL 表中某一列的 数据 ,可以使用 UPDATE 语句。下面是一个例子: 假设我们有一个名为 `users` 的表,其中包含 `id`、`name` 和 `age` 三列 数据 。我们想要将 `id` 为 1 的用户的年龄改为 30 。 可以使用以下 SQL 语句: UPDATE users SET age= 30 WHERE id=1; 这将更新 `users` 表中 `id` 为 1 的行的 `age` 列为 30 。 如果你想同时更新多条 数据 ,可以使用 WHERE 子句来指定更新的条件。例如,如果你想将 `name` 为 "Alice" 的所有用户的年龄改为 25,可以使用以下 SQL 语句: UPDATE users SET age=25 WHERE name='Alice'; 这将更新 `users` 表中所有 `name` 为 "Alice" 的行的 `age` 列为 25。