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.pswp.cn/news/396514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396514.shtml
英文地址,請注明出處:http://en.pswp.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?您是…