MYSQ不用窗口函数 ,实现排名,MYcat也可用

首先我们创建一张city_popularity表:

CREATE TABLEcity_popularity(

regionint(10) NOT NULL COMMENT ‘1 国内 2 海外’,

city_nameVARCHAR(64) NOT NULL,

popularityDOUBLE(5,2) NOT NULL);

并向其中添加数据:

INSERT INTOcity_popularity (region, city_name, popularity)VALUES(1, ‘北京’, 30.0),

(1, ‘上海’, 30.0),

(1, ‘南京’, 10.0),

(2, ‘伦敦’, 20.0),

(1, ‘张家界’, 8.0),

(2, ‘纽约’, 35.0),

(1, ‘三亚’, 25.0),

(2, ‘新加坡’, 35.0);

创建出的表及数据如下:

现在对所有城市的热门度进行排名:

  1. 通过窗口函数

MySQL从8.0开始支持窗口函数,也叫分析函数,序号函数ROW_NUMBER(), RANK(), DENSE_RANK()满足不同需求的排序

SELECTregion, city_name, popularity,

ROW_NUMBER()OVER (PARTITION BY region ORDER BY popularity DESC) ASrankFROM city_popularity;

使用ROW_NUMBER()函数排序结果如下:
在这里插入图片描述

SELECTregion, city_name, popularity,

RANK()OVER (PARTITION BY region ORDER BY popularity DESC) ASrankFROM city_popularity;

使用RANK()函数排序结果如下:

SELECTregion, city_name, popularity,

DENSE_RANK()OVER (PARTITION BY region ORDER BY popularity DESC) ASrankFROM city_popularity;

使用DENSE_RANK()函数排序结果如下:

  1. 通过表的自交

SELECT a.region, a.city_name, a.popularity, (COUNT(b.popularity)+1) ASrankFROM city_popularity AS a LEFT JOIN city_popularity ASbON a.region = b.region AND a.popularity

以上通过表的自交实现了对国内和海外城市分别排序,且数据相同的情况,排名保持不变,且占有字符的排序:

  1. 通过设置变量

SELECT city_popularity.*,@rank := @rank+1 ASrankFROM city_popularity ,(SELECT @rank:=0) initORDER BY popularity DESC;

顺序排序,每多一条排序自增加一,结果如下:

select city_popularity.*,case when @popularity = popularity then @rank

when @popularity := popularity then @rank :=@rank+1

when @popularity =0 then @rank :=@rank+1 END asrankfrom city_popularity,(select @rank :=0,@popularity :=NULL) initORDER BY popularity DESC;

当数据相同时,排名一致,不相同则排名自增加一,结果如下:

select city_popularity.*,@rank1 :=@rank1+1,@rank :=

case when @popularity = popularity then @rank

when @popularity := popularity then @rank1

when @popularity =0 then @rank1 END asrankfrom city_popularity,(select @rank :=0,@popularity :=NULL,@rank1 :=0) initORDER BY popularity DESC;

数据相同的情况,排名保持不变,且占有字符,结果如下:

SELECT region, city_name, popularity, @rank:=@rank+1 ASrankFROM city_popularity, (SELECT @rank:=0) q ORDER BY popularity DESC;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT MYSQL图书管理系统是一款用QT框架,结合MYSQL数据库开发的图书管理软件。本系统主要实现了图书的借阅和归还、读者信息的管理、图书信息的管理、图书馆统计和查询等功能。下面是系统的设计与实现。 1.系统设计 系统采用了分层架构,分为用户界面层、业务逻辑层和数据访问层。用户界面层采用了QT GUI部件库,实现了系统的用户界面,业务逻辑层实现了系统各功能模块的业务逻辑,数据访问层使用MYSQL数据库存储和访问数据。 2.系统实现 读者信息和图书信息的管理:系统中的读者信息和图书信息存储在MYSQL数据库中,通过QT中的SQL API来访问数据库实现了对图书信息和读者信息的增、删、改、查。 图书借阅和归还:图书的借阅和归还采用了事务处理,保证了数据的一致性。当读者借阅一本图书时,系统会检查该图书是否被借阅,如果没有被借阅,则记录借阅记录并将该图书的状态设置为已借出;当读者归还图书时,系统会检查该图书是否已经被借阅,如果被借阅,则还原该图书的状态。 图书馆统计和查询:系统中提供了各项功能操作的统计和查询,例如读者借阅情况、图书借阅情况、图书分类统计等,便于图书馆管理员进行管理和查询。 总之,本系统采用了QT和MYSQL等技术,通过分层架构和事务处理等技术,实现了图书管理系统的功能模块。本系统的实现具有良好的用户体验和信息管理效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值