diff --git a/core/RankingQuery.php b/core/RankingQuery.php
index a8575aed36c9393177c17cbd65c4232117c13aeb..9003fb4061af0cc33e794e6e8fbb379049e60278 100644
--- a/core/RankingQuery.php
+++ b/core/RankingQuery.php
@@ -34,6 +34,9 @@
  * $rankingQuery->execute($sql);
  * 
  * 
+ * For more examples, see RankingQueryTest.php
+ * 
+ * 
  * @package Piwik
  */
 class Piwik_RankingQuery
diff --git a/tests/PHPUnit/Core/RankingQueryTest.php b/tests/PHPUnit/Core/RankingQueryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..678f539320115771f6ca93ec4e446ec5a719a983
--- /dev/null
+++ b/tests/PHPUnit/Core/RankingQueryTest.php
@@ -0,0 +1,152 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @version $Id$
+ */
+
+class RankingQueryTest extends PHPUnit_Framework_TestCase
+{
+	
+    /**
+     * @group Core
+     * @group RankingQuery
+     */
+    public function testBasic()
+    {
+		$query = new Piwik_RankingQuery();
+		$query->addLabelColumn('label');
+		$query->addColumn('column');
+		$query->addColumn('columnSum', 'sum');
+		$query->setLimit(10);
+		
+		$innerQuery = "SELECT label, column, columnSum FROM myTable";
+		
+		$expected = "
+			SELECT
+				CASE
+					WHEN counter = 11 THEN \"Others\" 
+					ELSE `label`
+				END AS `label`,
+				`column`,
+				sum(`columnSum`) AS `columnSum`
+			FROM ( 
+				SELECT
+					`label`,
+					CASE 
+						WHEN @counter = 11 THEN 11
+						ELSE @counter:=@counter+1
+					END AS counter,
+					`column`,
+					`columnSum`
+				FROM
+					( SELECT @counter:=0 ) initCounter,
+					( SELECT label, column, columnSum FROM myTable ) actualQuery
+			 ) AS withCounter
+			GROUP BY counter
+		";
+		
+		$this->checkQuery($query, $innerQuery, $expected);
+	}
+	
+	/**
+	 * @group Core
+	 * @group RankingQuery
+	 */
+	public function testExcludeRows()
+	{
+		$query = new Piwik_RankingQuery(20);
+		$query->addLabelColumn('label');
+		$query->setColumnToMarkExcludedRows('exclude_marker');
+		
+		$innerQuery = "SELECT label, 1 AS exclude_marker FROM myTable";
+		
+		$expected = "
+			SELECT
+				CASE
+					WHEN counter = 21 THEN \"Others\" 
+					ELSE `label`
+				END AS `label`,
+				`exclude_marker`
+			FROM ( 
+				SELECT
+					`label`,
+					CASE
+						WHEN exclude_marker != 0 THEN -1 * exclude_marker
+						WHEN @counter = 21 THEN 21
+						ELSE @counter:=@counter+1
+					END AS counter,
+					`exclude_marker`
+				FROM
+					( SELECT @counter:=0 ) initCounter,
+					( SELECT label, 1 AS exclude_marker FROM myTable ) actualQuery
+			) AS withCounter
+			GROUP BY counter
+		";
+		
+		$this->checkQuery($query, $innerQuery, $expected);
+	}
+	
+	/**
+	 * @group Core
+	 * @group RankingQuery
+	 */
+	public function testPartitionResult()
+	{
+		$query = new Piwik_RankingQuery(1000);
+		$query->addLabelColumn('label');
+		$query->partitionResultIntoMultipleGroups('partition', array(1, 2, 3));
+		
+		$innerQuery = "SELECT label, partition FROM myTable";
+		
+		$expected = "
+			SELECT
+				CASE
+					WHEN counter = 1001 THEN \"Others\" 
+					ELSE `label`
+				END AS `label`,
+				`partition`
+			FROM ( 
+				SELECT
+					`label`,
+					CASE
+						WHEN `partition` = 1 AND @counter1 = 1001 THEN 1001
+						WHEN `partition` = 1 THEN @counter1:=@counter1+1
+						WHEN `partition` = 2 AND @counter2 = 1001 THEN 1001
+						WHEN `partition` = 2 THEN @counter2:=@counter2+1
+						WHEN `partition` = 3 AND @counter3 = 1001 THEN 1001
+						WHEN `partition` = 3 THEN @counter3:=@counter3+1
+						ELSE 0
+					END AS counter,
+					`partition`
+				FROM
+					( SELECT @counter1:=0 ) initCounter1,
+					( SELECT @counter2:=0 ) initCounter2,
+					( SELECT @counter3:=0 ) initCounter3, 
+					( SELECT label, partition FROM myTable ) actualQuery
+			) AS withCounter
+			GROUP BY counter, `partition`
+		";
+		
+		$this->checkQuery($query, $innerQuery, $expected);
+	}
+
+	/**
+	 * @param Piwik_RankingQuery $rankingQuery
+	 * @param string $innerQuerySql
+	 * @param string $expected
+	 */
+	private function checkQuery($rankingQuery, $innerQuerySql, $expected)
+	{
+		$query = $rankingQuery->generateQuery($innerQuerySql);
+		
+		$queryNoWhitespace = preg_replace("/\s+/", "", $query);
+		$expectedNoWhitespace = preg_replace("/\s+/", "", $expected);
+		
+		$message = 'Unexpected query: '.$query;
+		$this->assertEquals($queryNoWhitespace, $expectedNoWhitespace, $message);
+	}
+	
+}