2013-03-06 54 views
-1

我已經做了一個SQL查詢,它通過查看多少次來對頁面進行排名。例如,SQL排名百分點

╔══════╦═══════╗ 
║ PAGE ║ VIEWS ║ 
╠══════╬═══════╣ 
║ J ║ 100 ║ 
║ Q ║ 77 ║ 
║ 3 ║ 55 ║ 
║ A ║ 23 ║ 
║ 2 ║  6 ║ 
╚══════╩═══════╝ 

現在我想要做的是使用SQL查詢找到每個頁面的百分比等級。我想用這個數學很簡單,我只想把已經生成的表格的行號除以總行數。或者1減去這個值,這取決於我的興趣。

我可以在這樣的已經生成的表上做COUNT(頁面)嗎?我意識到這就是我將如何獲得總行數。但是有沒有任何命令返回一個行號?

只是爲了進一步澄清我的問題,我需要的結果如下

╔══════╦════════════════╗ 
║ PAGE ║ Percentile  ║ 
╠══════╬════════════════╣ 
║ J ║ (1-1/5)*100 ║ 
║ Q ║ (1-2/5)*100 ║ 
║ 3 ║ (1-3/5)*100 ║ 
║ A ║ (1-4/5)*100 ║ 
║ 2 ║ (1-5/5)*100 ║ 
╚══════╩════════════════╝ 

或一般(1-(行數)/(COUNT(頁))* 100

+1

您正在使用什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'RDBMS'代表*關係數據庫管理系統*。 'RDBMS是SQL'的基礎,並且適用於所有現代數據庫系統,如MS SQL Server,IBM DB2,Oracle,MySQL等等。您還可以展示您期望的結果是什麼? – 2013-03-06 07:18:23

+0

MySQL。我將添加一個我正在尋找的示例的附加表。 – 2013-03-06 07:28:04

+0

請不要感謝':D' – 2013-03-06 07:31:00

回答

2
SELECT page, 
     views, 
     (1-ranks/totals)*100 Percentile 
FROM 
(
    SELECT page, 
      views, 
      @rank:[email protected] + 1 ranks, 
      (SELECT COUNT(*) FROM tableName) totals 
    FROM tableName a, 
      (SELECT @rank:=0) s 
    ORDER BY views DESC 
) s 
+0

輝煌。謝謝! – 2013-03-06 07:53:16

+0

不客氣':D' – 2013-03-06 07:53:38

2

您無法計算單個SQL中某個表的百分位數聲明。 John Woo建議的方法在計算最高排名後會分崩離析,儘管結果對於正在處理的表格的第一個(不可預知的)百分比看起來很好,這意味着前幾個百分點。

爲什麼在這個職位由Oracle王牌羅蘭·鮑曼解釋原因: http://rpbouman.blogspot.com/2009/09/mysql-another-ranking-trick.html

簡而言之:用戶定義的變量沒有被設計成一個單一的SQL語句中是可靠的,只有在多個SQL語句。

閱讀MySQL手冊有關用戶定義的變量的第一句話: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html 「您可以在用戶定義的變量的值存儲在一個聲明,然後引用它後來在另一份聲明。」

然後在大約第10段中看到這個清晰的聲明:「作爲一般規則,除了在SET語句中,您不應該爲用戶變量賦值並讀取同一語句中的值。 ]對涉及用戶變量的表達式的評估順序未定義。「