<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thiago Zavaschi R2 &#187; Ranking</title>
	<atom:link href="http://zavaschi.com/index.php/tag/ranking/feed/" rel="self" type="application/rss+xml" />
	<link>http://zavaschi.com</link>
	<description>www.zavaschi.com</description>
	<lastBuildDate>Mon, 02 Jan 2012 16:51:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Repostagem &#8211; Ranking e Windowing</title>
		<link>http://zavaschi.com/index.php/2009/11/repostagem-ranking-e-windowing/</link>
		<comments>http://zavaschi.com/index.php/2009/11/repostagem-ranking-e-windowing/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 23:53:14 +0000</pubDate>
		<dc:creator>Thiago Zavaschi</dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[Rank]]></category>
		<category><![CDATA[Ranking]]></category>
		<category><![CDATA[Windowing]]></category>

		<guid isPermaLink="false">http://zavaschi.com/?p=42</guid>
		<description><![CDATA[&#160;
Essa repostagem eu não colocarei com data anterior, há muitos leitores que não conhecem esse recurso direito, mesmo estando presente desde o SQL Server 2005. Enjoy!
Utilizando Funções de Rank e Windowing
Hoje não vou falar de um recurso novo do SQL Server 2008, porém é bastante interessante e acredito que valha a pena um pequeno artigo [...]]]></description>
			<content:encoded><![CDATA[<h6>&#160;</h6>
<p>Essa repostagem eu não colocarei com data anterior, há muitos leitores que não conhecem esse recurso direito, mesmo estando presente desde o SQL Server 2005. Enjoy!</p>
<h6>Utilizando Funções de Rank e Windowing</h6>
<p>Hoje não vou falar de um recurso novo do SQL Server 2008, porém é bastante interessante e acredito que valha a pena um pequeno artigo sobre (principalmente em português já que não achei muita coisa em português).</p>
<p>As quatro funções T-SQL que vou me ater são: ROW_NUMBER(), RANK(), DENSE_RANK() e NTILE().   <br />A base que utilizarei nos exemplos é a amplamente conhecida Northwind, que pode ser baixada gratuitamente do site da microsoft, mas para poupar o trabalho dos leitores e/ou possíveis mudanças no link, coloquei no meu SkyDrive: <a href="http://oxntzw.bay.livefilestore.com/y1pNpYhrseUtAh78Tpj25-wQHDSnMSeY59R0ulI-I5EEn1x8FadrqGmRPU4pJlQWz1nTVhAUIP-fBBG6CIob07yww/SQL2000.Sample.Databases.%28Northwind,pubs%29.zip?download">aqui</a>.    <br />Vamos começar dando uma pequena olhada nos dados.    <br />Usamos a seguinte query SQL (limitada a 15 resultados e ordenados pelo preço unitário, do maior para o menor):</p>
<blockquote><p><strong>SELECT TOP 15 ProductID, ProductName, UnitPrice FROM Products ORDER BY UnitPrice DESC</strong></p>
</blockquote>
<p>Lembro que é uma boa prática utilizar os comandos SQL em caixa alta (todas as letras em maiúsculas).   <br />Teremos o seguinte resultado:</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice     <br />----------- ---------------------------------------- ----------      <br />38&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Côte de Blaye&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 263.50      <br />29&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Thüringer Rostbratwurst&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 123.79      <br />9&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Mishi Kobe Niku&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 97.00      <br />20&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Sir Rodney's Marmalade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 81.00      <br />18&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Carnarvon Tigers&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 62.50      <br />59&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Raclette Courdavault&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 55.00      <br />51&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Manjimup Dried Apples&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 53.00      <br />62&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tarte au sucre&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 49.30      <br />43&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ipoh Coffee&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 46.00      <br />28&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rössle Sauerkraut&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 45.60      <br />27&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Schoggi Schokolade&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 43.90      <br />63&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vegie-spread&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 43.90      <br />8&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Northwoods Cranberry Sauce&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 40.00      <br />17&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Alice Mutton&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 39.00      <br />12&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Manchego La Pastora&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 38.00</font></p>
<p><strong>ROW_NUMBER():     <br /></strong>O ROW_NUMBER é a função de ranking mais simples existente. Consiste de atribuir o valor de ranking igual a 1 para o primeiro registro (de acordo com o OVER, ver exemplo a seguir para facilitar), e para cada registro subsequente. Vejam o exemplo a seguir utilizando o ROW_NUMBER(). Percebam também que devido ao ORDER BY do OVER não é mais necessário usá-lo após o WHERE como na query anterior. </p>
<blockquote><p><strong>SELECT TOP 15 ProductID, ProductName, UnitPrice, ROW_NUMBER() OVER (ORDER BY UnitPrice DESC) AS ROW_COUNT FROM Products</strong></p>
</blockquote>
<p>Teremos o seguinte resultado:</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice&#160;&#160; ROW_NUMBER     <br />----------- ------------------------ --------&#160;&#160;&#160; -----------      <br />38&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Côte de Blaye&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 263.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />29&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Thüringer Rostbratwurst&#160;&#160; 123.79&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />9&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Mishi Kobe Niku&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 97.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3      <br />20&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Sir Rodney's Marmalade&#160;&#160;&#160; 81.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4      <br />18&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Carnarvon Tigers&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 62.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5      <br />59&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Raclette Courdavault&#160;&#160;&#160;&#160;&#160; 55.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6      <br />51&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Manjimup Dried Apples&#160;&#160;&#160;&#160; 53.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7      <br />62&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tarte au sucre&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 49.30&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8      <br />43&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ipoh Coffee&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 46.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9      <br />28&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rössle Sauerkraut&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 45.60&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10      <br />27&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Schoggi Schokolade&#160;&#160;&#160;&#160;&#160;&#160;&#160; 43.90&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 11      <br />63&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vegie-spread&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 43.90&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12      <br />8&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Northwoods Cranberry Sauce40.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 13      <br />17&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Alice Mutton&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 39.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 14      <br />12&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Manchego La Pastora 38.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 15</font></p>
<p>Bastante simples, como eu disse. Porém é bastante útil, eu particularmente a utilizo para fazer paginação nos casos em que ela é feita no banco de dados mesmo. Para tal basta adicionar ao final (por exemplo): <strong>WHERE ROW_NUMBER &gt;= 10 AND ROW_NUMBER &lt;= 21</strong>.</p>
<p><strong>RANK():</strong>    <br />Agora vamos utilizar a função RANK para ranquearmos os produtos do produto mais caro para o mais barato.    <br />Com a função RANK podemos fazer isso, o comportamento do valor de ranking é o seguinte:    <br />Caso haja empate, ambos recebem o mesmo valor de ranking. Só que o registro seguinte ao empate não é o número imediatamente subsequente, mas sim o numero de rank do empate acrescido do numero de registros empatados.</p>
<blockquote><p><strong>SELECT TOP 15 ProductID, ProductName, UnitPrice, RANK() OVER (ORDER BY UnitPrice ASC) AS RANK FROM Products</strong></p>
</blockquote>
<p>Dado o fato de que não há repetição de preços no exemplo inicial, então estou trocando da ordenação do decrescente pata a crescente (ao invés de DESC estou utilizando ASC).</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice&#160;&#160;&#160; RANK     <br />----------- -----------------------&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; --------&#160;&#160;&#160; ---------      <br />33&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Geitost&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />24&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Guaraná Fantástica&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />13&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Konbu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3      <br />52&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Filo Mix&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4      <br />54&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tourtière&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.45&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5      <br />75&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rhönbräu Klosterbier&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.75&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6      <br />23&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tunnbröd&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7      <br />19&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Teatime Chocolate Biscuits&#160;&#160;&#160;&#160;&#160; 9.20&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8      <br />47&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Zaanse koeken&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9      <br />45&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rogede sild&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.50&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9      <br />41&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Jack's New England Clam Chowder 9.65&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 11      <br />21&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Sir Rodney's Scones&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12      <br />3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Aniseed Syrup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12      <br />74&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Longlife Tofu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12      <br />46&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Spegesild&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12.00&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 15</font></p>
<p>O RANK trabalhou de modo semelhante ao ROW_NUMBER, mas no caso em que houveram registros com igual preço unitário (UnitPrice, utilizado no OVER) ele tratou com a mesma 'pontuação'. Para os correligionários do futebol, é algo semelhante às posições dos times nas tabelas de campeonatos, e etc.</p>
<p>Mas e se eu desejar que (segundo o exemplo acima) após o &quot;rank 9&quot; que foi repetido fosse o número 10 e não o 11? Para tal temos o:</p>
<p><strong>DENSE_RANK():     <br /></strong>O comportamento do é o mesmo do RANK(), o que muda é que não há &quot;pulos&quot;, ou seja, se uma tupla retornada contém o rank de número 37, podemos garantir que todos os número do intervalo [1, 36] já apareceram.    <br />A query para o nosso exemplo a seguir é a seguinte:</p>
<blockquote><p><strong>SELECT TOP 15 ProductID, ProductName, UnitPrice, DENSE_RANK() OVER (ORDER BY UnitPrice ASC) AS DENSE_RANK FROM Products</strong></p>
</blockquote>
<p>E a sua execução sobre a base Northwind resulta em:</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice&#160;&#160; DENSE_RANK     <br />----------- -------------------------------- ---------- ---------      <br />33&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Geitost&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2.50&#160;&#160;&#160;&#160;&#160; 1      <br />24&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Guaraná Fantástica&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4.50&#160;&#160;&#160;&#160;&#160; 2      <br />13&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Konbu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6.00&#160;&#160;&#160;&#160;&#160; 3      <br />52&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Filo Mix&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.00&#160;&#160;&#160;&#160;&#160; 4      <br />54&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tourtière&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.45&#160;&#160;&#160;&#160;&#160; 5      <br />75&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rhönbräu Klosterbier&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7.75&#160;&#160;&#160;&#160;&#160; 6      <br />23&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tunnbröd&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.00&#160;&#160;&#160;&#160;&#160; 7      <br />19&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Teatime Chocolate Biscuits&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.20&#160;&#160;&#160;&#160;&#160; 8      <br />47&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Zaanse koeken&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.50&#160;&#160;&#160;&#160;&#160; 9      <br />45&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Rogede sild&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9.50&#160;&#160;&#160;&#160;&#160; 9      <br />41&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Jack's New England Clam Chowder&#160;&#160; 9.65&#160;&#160;&#160;&#160;&#160; 10      <br />21&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Sir Rodney's Scones&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160; 11      <br />3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Aniseed Syrup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160; 11      <br />74&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Longlife Tofu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160; 11      <br />46&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Spegesild&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 12.00&#160;&#160;&#160;&#160; 12</font></p>
<p>Conforme havia dito, após uma repetição (registros com ProductID 47 e 45, por exemplo), no caso do número 9, temos na sequência o número 10, e não o 11 como no RANK(). O último valor do DENSE_RANK é 12, então também sabemos que todos os números de 1 a 11 já apareceram (com ou sem repetição).</p>
<p><strong>NTILE():</strong>    <br />Ao contrário das outras funções que apresentei o valor para este rankeamento não é baseado no valor, mas sim na quantidade de registros. Se temos 12 registros e utilizamos um NTILE(N) (onde o N é um número natural), o SQL tenta agrupar as tuplas de retorno naquele número passado como paramêtro, atribuindo valores iguais para os elementos do mesmo grupo. Um exemplo prático pode ser obtido com a seguinte query SQL:</p>
<blockquote><p><strong>SELECT ProductID, ProductName, UnitPrice, NTILE(3) OVER (ORDER BY ProductID ASC) AS NTILE FROM Products WHERE ProductID &lt;= 15</strong></p>
</blockquote>
<p>A query acima pode fazer você indagar: <em>&quot;Ué Zavaschi, porque você não utilizou o TOP 15 como já havia feito para os demais exemplos?&quot;</em>. </p>
<p>Uma rápida explicação:   <br /><em>A questão é que o TOP é algo como um &quot;truncador&quot; de retornos. Uma query que originalmente retornaria 100 linhas de registros, ao executar um TOP 15, dizemos que queremos apenas as 15 primeiras, no entanto o SQL internamente trabalhou com as 100 linhas.     <br />Ao eu executar um NTILE() e aplicar um TOP 15, o NTILE foi aplicado sobre toda a coleção e após isto eu recuperaria os 15 primeiros registros. Devido a tal comportamento, não seria possível mostrar o agrupamento que o NTILE faz, já que muito possivelmente todos os primeiros 15 registros estivessem no mesmo grupo (recebendo 1 como valor).</em></p>
<p>Como retorno a query apresentada temos a seguinte saída:</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice&#160; NTILE (3)     <br />----------- --------------------------------- ---------- ----------      <br />1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chai&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 18.00&#160;&#160;&#160;&#160;&#160; 1      <br />2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chang&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 19.00&#160;&#160;&#160;&#160;&#160; 1      <br />3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Aniseed Syrup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160;&#160; 1      <br />4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chef Anton's Cajun Seasoning&#160;&#160;&#160;&#160;&#160; 22.00&#160;&#160;&#160;&#160;&#160; 1      <br />5&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chef Anton's Gumbo Mix&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 21.35&#160;&#160;&#160;&#160;&#160; 1      <br />6&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Grandma's Boysenberry Spread&#160;&#160;&#160;&#160;&#160; 25.00&#160;&#160;&#160;&#160;&#160; 2      <br />7&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Uncle Bob's Organic Dried Pears&#160;&#160; 30.00&#160;&#160;&#160;&#160;&#160; 2      <br />8&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Northwoods Cranberry Sauce&#160;&#160;&#160;&#160;&#160;&#160;&#160; 40.00&#160;&#160;&#160;&#160;&#160; 2      <br />9&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Mishi Kobe Niku&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 97.00&#160;&#160;&#160;&#160;&#160; 2      <br />10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ikura&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 31.00&#160;&#160;&#160;&#160;&#160; 2      <br />11&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Cabrales&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 21.00&#160;&#160;&#160;&#160;&#160; 3      <br />12&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Manchego La Pastora&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 38.00&#160;&#160;&#160;&#160;&#160; 3      <br />13&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Konbu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6.00&#160;&#160;&#160;&#160;&#160;&#160; 3      <br />14&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tofu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 23.25&#160;&#160;&#160;&#160;&#160; 3      <br />15&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Genen Shouyu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 15.50&#160;&#160;&#160;&#160;&#160; 3</font></p>
<p>Gostaria que reparassem também que apesar do OVER, o resultado do NTILE() é baseado principalmente no número de resultados, caso não seja possível uma divisão exata, o SQL Server tentará agrupar da melhor maneira possível, fazendo que alguns conjuntos possuam um número de elementos maior que outros.   <br />Alterando um poquinho a query para recuperarmos um registro a mais, mas mantendo o mesmo número de divisões:</p>
<blockquote><p><strong>SELECT ProductID, ProductName, UnitPrice, NTILE(3) OVER (ORDER BY ProductID ASC) AS NTILE FROM Products WHERE ProductID &lt;= 16</strong></p>
</blockquote>
<p>Nos leva ao seguinte resultado, onde o grupo dos &quot;1&quot; possui um elemento a mais (6 elementos) do que o grupo dos &quot;2&quot; e &quot;3&quot; (5 elementos cada):</p>
<p><font size="2" face="Courier New">ProductID&#160;&#160; ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; UnitPrice NTILE (3)     <br />----------- --------------------------------- --------- ----------      <br />1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chai&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 18.00&#160;&#160;&#160;&#160; 1      <br />2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chang&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 19.00&#160;&#160;&#160;&#160; 1      <br />3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Aniseed Syrup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 10.00&#160;&#160;&#160;&#160; 1      <br />4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chef Anton's Cajun Seasoning&#160;&#160;&#160;&#160;&#160; 22.00&#160;&#160;&#160;&#160; 1      <br />5&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chef Anton's Gumbo Mix&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 21.35&#160;&#160;&#160;&#160; 1      <br />6&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Grandma's Boysenberry Spread&#160;&#160;&#160;&#160;&#160; 25.00&#160;&#160;&#160;&#160; 1      <br />7&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Uncle Bob's Organic Dried Pears&#160;&#160; 30.00&#160;&#160;&#160;&#160; 2      <br />8&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Northwoods Cranberry Sauce&#160;&#160;&#160;&#160;&#160;&#160;&#160; 40.00&#160;&#160;&#160;&#160; 2      <br />9&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Mishi Kobe Niku&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 97.00&#160;&#160;&#160;&#160; 2      <br />10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ikura&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 31.00&#160;&#160;&#160;&#160; 2      <br />11&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Cabrales&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 21.00&#160;&#160;&#160;&#160; 2      <br />12&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Queso Manchego La Pastora&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 38.00&#160;&#160;&#160;&#160; 3      <br />13&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Konbu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6.00&#160;&#160;&#160;&#160;&#160; 3      <br />14&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Tofu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 23.25&#160;&#160;&#160;&#160; 3      <br />15&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Genen Shouyu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 15.50&#160;&#160;&#160;&#160; 3      <br />16&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Pavlova&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 17.45&#160;&#160;&#160;&#160; 3</font></p>
<p><em>&quot;Zavaschi, gostei destas funções de ranking, mas esta última de NTILE me deu uma idéia... E se eu quiser aplicar (na mesma query) um ranking mas para grupos específicos dentre os resultados dessa query, é possível?&quot;</em>    <br />Para tal utilizaremos o PARTITION BY.</p>
<p><strong>PARTITION BY:     <br /></strong>As funções de ranking pontem ser combinadas com funções de windowing (vou manter o termo em inglês, por questão de preferência). A função de windowing (janelamento ...) dividirá os registros retornados baseado no PARTITYON BY aliado à cláusula OVER utilizada na função de ranking. Com isso você obterá um ranking separado para cada partição. Vale lembrar que o PARTITION BY também pode ser usado com outras funções agragadoras, como MIN, MAX, etc.    <br />Um exemplo disto pode ser visto a seguir (adaptando os exemplos anteriores para o seguinte exemplo):</p>
<blockquote><p><strong>SELECT ProductName, SupplierID, ROW_NUMBER() OVER (PARTITION BY SupplierID Order By SupplierID) AS PARTITIONBY FROM Products WHERE ProductID &lt;= 15</strong></p>
</blockquote>
<p>Na query exemplo temos a aplicação da função de ranking ROW_NUMBER() sobre as partições geradas pelos registros onde cada Supplier é igual. Para facilitar a visualização estou ordenando também pelo SupplierID, mas não é necessário que o campo seja o mesmo.   <br />A query exemplo nos retorna:</p>
<p><font size="2" face="Courier New">ProductName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SupplierID&#160; PARTITIONBY     <br />---------------------------------------- ----------- ----------      <br />Chai&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Chang&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Aniseed Syrup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3      <br />Chef Anton's Cajun Seasoning&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Chef Anton's Gumbo Mix&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Grandma's Boysenberry Spread&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Uncle Bob's Organic Dried Pears&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Northwoods Cranberry Sauce&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3      <br />Mishi Kobe Niku&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Ikura&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Queso Cabrales&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Queso Manchego La Pastora&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 5&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Konbu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1      <br />Tofu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2      <br />Genen Shouyu&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3</font></p>
<p>No exemplo podemos ver que para janela (correspondida para os grupos onde os suppliers são iguais) temos a aplicação individual da nossa função de ranking.</p>
<p>---</p>
<p>Bom se você, leitor, chegou até aqui, parabéns! Além de mostrar que tem paciência em aguentar o que eu escrevi (hehe), ainda adquiriu um conhecimento bastante interessante sobre ranking no SQL Server.</p>
<p>Gostaria de reiterar que os exemplos são para fins didáticos e que quaisquer dúvidas e sugestões podem entrar em contato. :)</p>
<p>Abraços,   <br />Thiago Zavaschi</p>
]]></content:encoded>
			<wfw:commentRss>http://zavaschi.com/index.php/2009/11/repostagem-ranking-e-windowing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

