php mysql 排名算法_MySQL PHP:优化排名查询和计数子查询

这是原始数据,并希望根据得分(count(tbl_1.id))对它们进行排名.

[tbl_1]

===========

id | name

===========

1 | peter

2 | jane

1 | peter

2 | jane

3 | harry

3 | harry

3 | harry

3 | harry

4 | ron

因此,制作临时表(tbl_2)来计算每个id的分数.

SELECT id, name, COUNT( id ) AS score

FROM tbl_1

GROUP BY id

ORDER BY score DESC;

LIMIT 0, 30;

然后结果是;

[tbl_2]

===================

id | name | score

===================

3 | harry | 4

1 | peter | 2

2 | jane | 2

4 | ron | 1

然后查询这个;

SELECT v1.id, v1.name, v1.score, COUNT( v2.score ) AS rank

FROM votes v1

JOIN votes v2 ON v1.score < v2.score

OR (

v1.score = v2.score

AND v1.id = v2.id

)

GROUP BY v1.id, v1.score

ORDER BY v1.rank ASC, v1.id ASC

LIMIT 0, 30;

然后结果是;

==========================

id | name | score | rank

==========================

3 | harry | 4 | 1

1 | peter | 2 | 2

2 | jane | 2 | 2

4 | ron | 1 | 4

是否可以很好地在一个事务(查询)中执行此操作?

最佳答案 是的,可以在单个查询中执行此操作.但它在MySQL中是一个完整的毛球,因为MySQL没有简单的ROWNUM操作,你需要一个用于排名计算.

这是您显示排名的投票查询. @ranka变量用于对行进行编号.

SELECT @ranka:=@ranka+1 AS rank, id, name, score

FROM

(

SELECT id,

name,

COUNT( id ) AS score

FROM tbl_1

GROUP BY id

ORDER BY score DESC, id

) votes,

(SELECT @ranka:=0) r

正如您已经发现的那样,您需要自行加入此项以获得正确的排名(正确处理关系).因此,如果您接受查询并将两个引用替换为您的投票表,每个引用都有自己的子查询版本,那么您将获得所需的内容.

SELECT v1.id,

v1.name,

v1.score,

COUNT( v2.score ) AS rank

FROM (

SELECT @ranka:=@ranka+1 AS rank,

id,

name,

score

FROM

(

SELECT id,

name,

COUNT( id ) AS score

FROM tbl_1

GROUP BY id

ORDER BY score DESC, name

) votes,

(SELECT @ranka:=0) r) v1

JOIN (

SELECT @rankb:=@rankb+1 AS rank,

id,

name,

score

FROM

(

SELECT id,

name,

COUNT( id ) AS score

FROM tbl_1

GROUP BY id

ORDER BY score DESC, name

) votes,

(SELECT @rankb:=0) r) v2

ON (v1.score < v2.score) OR

(v1.score = v2.score AND v1.id = v2.id)

GROUP BY v1.id, v1.score

ORDER BY v1.rank ASC, v1.id ASC

LIMIT 0, 30;

告诉你这是一个毛球.请注意,在您自行加入的子查询的两个版本中需要不同的@ranka和@rankb变量,以使行编号正常工作:这些变量在MySQL中具有连接范围,而不是子查询范围.

编辑:使用PostgreSQL的RANK()函数更容易做到这一点.

SELECT name, votes, rank() over (ORDER BY votes)

FROM (

SELECT name, count(id) votes

FROM tab

GROUP BY name

)x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF-CSP 最大的矩形

问题描述在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&#xff09;个矩形的高度是hi。这n个矩形构成了一个直方图。例如&#xff0c;下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面积最大的矩…

Stack Overflow 2016年对50,000名开发人员进行的调查得出的见解

Today, Stack Overflow released the results of their 2016 survey of more than 50,000 developers.今天&#xff0c;Stack Overflow发布了他们2016年对50,000多名开发人员进行的调查的结果。 I’ve combed through this big document to bring you the most surprising ins…

web管理

1.站点根目录下查找是否被放置webshell***根据语句判断是不是PHP***脚本# find /storage/www/ -name "*.php" | xargs grep-in --color "eval("# grep -i --include*.php -r system\s*\( /storage/www/2.统计访问日志中来自同ip出现的次数分析盗链、***、机…

MySQL的主从复制云栖社区_MySQL-主从复制

前言前篇说了作为运维在数据库块最起码要会两大技能&#xff0c;今天来说说第二技能--主从复制随着业务的增长&#xff0c;一台数据库服务器以满足不了需求了&#xff0c;负载过重&#xff0c;这时候就需要减压&#xff0c;实现负载均衡读写分离&#xff0c;一主一从或一主多从…

数据存储(SharedPreferences存储)

SharedPreferences是通过 键值对 的方式存储数据SharedPreferences是通过键值对的方式存储的 将数据存储到SharedPreferences中有3种方法&#xff1a;1.Context类中的getSharedPreferences()方法2.Activity类中的getPreferences()方法3.PreferencesManager类中的getDefaultShar…

编程程序的名称要记住吗_学习编程时要记住的5件事

编程程序的名称要记住吗by Kurt由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You’re Learning to Program) Learning to program is challenging. Aside from choosing a language or setting up a development environment that you know nothing about, t…

mysql 数据分析的步骤_数据分析8个主要步骤

# 在对数据进行分析时&#xff0c;主要细分为明确目标、应用思维和如下8个具体步骤&#xff1a;1、读取数据2、清洗数据3、操作数据4、转换数据5、整理数据6、分析数据7、展现数据8、总结报告接下来将介绍使用python来具体处理数据&#xff0c;包括上面几个步骤的实现&#xff…

python学习的一个定位_python学习之——selenium元素定位

web自动化测试按步骤拆分&#xff0c;可以分为四步操作&#xff1a;定位元素&#xff0c;操作元素&#xff0c;获取返回结果&#xff0c;断言(返回结果与期望结果是否一致)&#xff0c;最后自动出测试报告。其中定位元素尤为关键&#xff0c;此篇是使用webdriver通过页面各个元…

Invoker

Invoker 是实体&#xff0c;dubbo外其他对象的转化。转载于:https://www.cnblogs.com/gtaxmjld/p/9786894.html

如何在开源社区贡献代码_如何在15分钟内从浏览器获得您的第一个开源贡献

如何在开源社区贡献代码Matt Mullenweg, founder of Automattic, recently offered this advice to aspiring developers: “Contribute to open source.”Automattic的创始人Matt Mullenweg最近向有抱负的开发人员提供了以下建议 &#xff1a;“ 致力于开源。 ” Mullenweg —…

小心情。

从一开始学习html到现在的nodejs&#xff0c;也有段时间了&#xff0c;那个时候什么都不知道&#xff0c;记得一两年之前还沉迷在一些网络技术的圈子里面&#xff0c;每天看着那些大牛&#xff0c;感觉都很是厉害&#xff0c;每一项技术总是那样的让我着迷&#xff0c;从易语言…

一、win7下安装yii2

作者&#xff1a;PHP学习网 出处&#xff1a;http://www.viphper.com/?p1159 本文版权归作者&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。 之前在liunx上安装过yii…

js获取浏览器滚动条距离顶端的距离

js获取浏览器滚动条距离顶端的距离 一、jQuery获取的相关方法 jquery 获取滚动条高度获取浏览器显示区域的高度 &#xff1a;$(window).height(); 获取浏览器显示区域的宽度 &#xff1a;$(window).width(); 获取页面的文档高度 &#xff1a;$(document).height(); 获取页面的文…

vs dll必须和exe在同一个目录_Win10系统丢失 .dll 文件的三种解决方案教程

有时候开机或打开一个软件时&#xff0c;系统会提示无法启动程序&#xff0c;这是怎么回事呢&#xff1f;这是因为计算机丢失某个或某些dll文件&#xff0c;由于系统本身不存在这些运行库文件&#xff0c;需要进行添加才能使用该软件。方法一&#xff1a;下载丢失的.dll文件&am…

datagrid页面获取表单一条数据的例子

【问题背景】 最近在做ITOO考评的时候想从页面获取表单选中的数据&#xff1a; 【代码】 在数据网格&#xff08;datagrid&#xff09;组件包含两种方法来检索选中行数据&#xff1a; getSelected&#xff1a;取得第一个选中行数据&#xff0c;如果没有选中行&#xff0c;则返回…

utf-8转换gbk代码_将代码转换为现金-如何以Web开发人员的身份赚钱并讲述故事。...

utf-8转换gbk代码by Kurt由库尔特 将代码转换为现金-如何以Web开发人员的身份赚钱并讲述故事。 (Turning code to cash — How to make money as a Web Developer and live to tell the tale.) So you just learnt to code. You’re eager and anyone who can’t code thinks …

Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建

前言 前面一篇文章讲了一下版本控制&#xff0c;但其实这一篇并没有打算讲细节的&#xff0c;感觉应该自己去动手弄一下&#xff0c;后来考虑了一下&#xff0c;版本控制真的挺重要的&#xff0c;如果自己实在搭建不好反而不去使用的话&#xff0c;真的有点可惜&#xff0c;当然…

AHK-UMSS框架 (AHK通用修饰键解决方案,任何键都是修饰键)

AHK-UMSS框架 (AHK通用修饰键解决方案,任何键都是修饰键) 1 #Warn2 #NoEnv ; # 禁用环境变量检查:不检查空变量是否为"环境变量"&#xff0c;可以极大地提高效率3 #Hotstring EndChars ◎ ; # 热字串终止符号设置:只把空格作为终止符,(文档上所说是不能单独用空格的…

flask-sqlalchemy mysql_Flask SQLAlchemy连接到MySQL数据库

设置代码&#xff1a;我正在构建一个带有AngularJS前端的基本Flask应用程序&#xff0c;目前我需要连接到我用Godaddy phpmyadmin托管的MySQL数据库。这是我的一部分__init__.pyfrom flask import Flaskfrom flask.ext.sqlalchemy import SQLAlchemy# Create instnace called a…

有没有编码的知识图谱_没有人告诉您关于学习编码的知识-以及为什么如此困难...

有没有编码的知识图谱by Joyce Akiko通过乔伊斯明子 没有人告诉您关于学习编码的知识-以及为什么如此困难 (What Nobody Tells You About Learning To Code — And Why That Makes It So Hard) Are you familiar with the article Why Learning to Code is So Damn Hard?您是…