表信息如下:
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。