¾È±Ô °øºÎ¹æ

MS-SQL > Rank() - ºÐ¼®ÇÔ¼ö (mssql 2005 ÀÌ»ó)

µî·ÏÀÏ : 2017-06-30 18:57 Á¶È¸¼ö : 53,039

SQL Server¸¦ »ç¿ëÇÏ´Ùº¸¸é ¾÷¹«»ó ƯÁ¤ µ¥ÀÌÅ͵鿡 ´ëÇÑ ¼ø¹ø ¶Ç´Â ¼øÀ§¸¦ ¸Å°Ü¾ß ÇÏ´Â °æ¿ì°¡ Á¾Á¾ ¹ß»ýÇÑ´Ù. 
ÀÌ·²°æ¿ì SQL Server 2000¹öÁ¯À» »ç¿ëÇÒ¶§ ÂüÀ¸·Î ³­°¨ÇØ Çϸ鼭 "¼­ºêÄõ¸®+Ä«¸£Æ¼¼Ç°ö Á¶ÀÎ" ÄÞº¸¸¦ »ç¿ëÇÑ ½´ÆÛÄõ¸®·Î ¼ø¹ø 󸮸¦ ÇϰԵȴÙ. ¹°·Ð Äõ¸®¼º´ÉÀº ¾Èµå·Î¸Þ´Ù·Î ³¯·Áº¸³»¸ç ¸Ó¸® ¼Ó¿¡´Â ¿À¶óŬÀÇ ROWNUMÀ» ºñ·ÔÇÑ ´Ù¼öÀÇ ºÐ¼®ÇÔ¼öµéÀ» ±×¸®¿ö ÇÑ´Ù.

ÀÌ·± SQL Server »ç¿ëÀÚµéÀÇ ºÒ¸¸À» ¾Ë¾Ò´ÂÁö ¸ô¶ú´ÂÁö MS¿¡¼­´Â SQL Server 2005¹öÁ¯¿¡¼­ ´Ù¾çÇÑ ºÐ¼®ÇÔ¼öµéÀ» Á¦°øÇØÁØ´Ù. 

¸ÕÀú ¿¹Á¦ µ¥ÀÌÅ͸¦ ¸¸µé¾î º¸ÀÚ.

¾Æ·¡´Â SM ¿£ÅÍÅ×ÀθÕÆ®ÀÇ ±Þ¿© ³»¿ª ÀÌ´Ù. ¹°·Ð Á÷¿øÀº ¼Ò³à½Ã´ë´Ù~~@.@

CREATE TABLE ±Þ¿©
(
    À̸§ nvarchar(10),
    ºÎ¼­ nvarchar(10),
    Á÷Ã¥ nvarchar(10),
    ±Þ¿© int
)
GO
INSERT ±Þ¿© VALUES ('À¯¸®','°³¹ßºÎ','»ç¿ø',300)
INSERT ±Þ¿© VALUES ('Å¿¬','Áö¿øºÎ','»ç¿ø',250)
INSERT ±Þ¿© VALUES ('¼­¿¬','°³¹ßºÎ','´ë¸®',350)
INSERT ±Þ¿© VALUES ('¼ö¿µ','¿µ¾÷ºÎ','°úÀå',380)
INSERT ±Þ¿© VALUES ('À±¾Æ','Áö¿øºÎ','»ç¿ø',200)
INSERT ±Þ¿© VALUES ('È¿¿¬','°ü¸®ºÎ','°úÀå',320)
INSERT ±Þ¿© VALUES ('Á¦½ÃÄ«','¿µ¾÷ºÎ','»ç¿ø',220)
INSERT ±Þ¿© VALUES ('ƼÆÄ´Ï','°ü¸®ºÎ','»ç¿ø',220)
INSERT ±Þ¿© VALUES ('½á´Ï','°³¹ßºÎ','´ë¸®',330)

1. ROW_NUMBER()

ROW_NUMBER()ÇÔ¼ö´Â µ¥ÀÌÅ͵éÀÇ °¢°¢ÀÇ Çà¿¡ ´ëÇÑ ÀÏ·ÃÀÇ ¹øÈ£¸¦ ºÙ¿©ÁÖ´Â ±â´ÉÀÌ´Ù. ÁÖ·Î À¥ °³¹ß½Ã ÆäÀÌ¡¿¡ ÇÊ¿äÇÑ À¯¿ëÇÑ ÇÔ¼ö ÀÌ´Ù.

SELECT ROW_NUMBER() OVER (ORDER BY ±Þ¿© desc) as ¼øÀ§, 
       À̸§, ºÎ¼­, Á÷Ã¥, ±Þ¿©
FROM ±Þ¿©

- °á°ú..
  
  ¼øÀ§    À̸§    ºÎ¼­    Á÷Ã¥    ±Þ¿©
 1    ¼ö¿µ    ¿µ¾÷ºÎ    °úÀå    380
 2    ¼­¿¬    °³¹ßºÎ    ´ë¸®    350
 3    ½á´Ï    °³¹ßºÎ    ´ë¸®    330
 4    È¿¿¬    °ü¸®ºÎ    °úÀå    320
 5    À¯¸®    °³¹ßºÎ    »ç¿ø    300
 6    Å¿¬    Áö¿øºÎ    »ç¿ø    250
 7    Á¦½ÃÄ«    ¿µ¾÷ºÎ    »ç¿ø    220
 8    Æ¼ÆÄ´Ï    °ü¸®ºÎ    »ç¿ø    220
 9    À±¾Æ    Áö¿øºÎ    »ç¿ø    200


2. RANK() ÇÔ¼ö

ROW_NUMBER¿Í °°Àº ÀÏÁ¾ÀÇ ¼ø¹øÀÌÁö¸¸ ROW_NUMBER´Â ¹«Á¶°Ç 1¿¡¼­ ºÎÅÍ ¼øÂ÷ÀûÀÎ ¼ø¹øÀ» ¸Å±â´Â ÀϹæÀûÀÎ ¹æ½ÄÀÌÁö¸¸ RANK()´Â ¼ø¼öÇÏ°Ô ¼øÀ§¿¡ ´ëÇÑ ¼ø¹øÀ¸·Î µ¿·üÀÏ°æ¿ì °°Àº ¼ø¹øÀ¸·Î 󸮵ȴÙ. 

±×·³ ¼Ò³à½Ã´ëÀÇ ±Þ¿© ¼øÀ§¸¦ º¸ÀÚ.

SELECT  RANK() OVER (ORDER BY ±Þ¿© desc) as ¼øÀ§, 
       À̸§, ºÎ¼­, Á÷Ã¥, ±Þ¿©
FROM ±Þ¿©

- °á°ú..
    
¼øÀ§    À̸§    ºÎ¼­    Á÷Ã¥    ±Þ¿©
1    ¼ö¿µ    ¿µ¾÷ºÎ    °úÀå    380
2    ¼­¿¬    °³¹ßºÎ    ´ë¸®    350
3    ½á´Ï    °³¹ßºÎ    ´ë¸®    330
4    È¿¿¬    °ü¸®ºÎ    °úÀå    320
5    À¯¸®    °³¹ßºÎ    »ç¿ø    300
6    Å¿¬    Áö¿øºÎ    »ç¿ø    250
7    Á¦½ÃÄ«    ¿µ¾÷ºÎ    »ç¿ø    220
7    Æ¼ÆÄ´Ï    °ü¸®ºÎ    »ç¿ø    220
9    À±¾Æ    Áö¿øºÎ    »ç¿ø    200

°á°ú¸¦ º¸´Ï Á¦½ÃÄ«¿Í ƼÆÄ´Ï°¡ ³ª¶õÈ÷ 7À§¸¦ ¾Ë¼ö ÀÖ´Ù.

3. DENSE_RANK()

 RANK()ÇÔ¼ö À¯»ç ÇÏÁö¸¸ µ¿·ü ¼ø¹øÀÌ ÀÖÀ»°æ¿ì ±× ´ÙÀ½ ¼ø¹øÀ¸·Î ¸Å°ÜÁø´Ù´Â ´Ù¸¥Á¡ÀÌ ÀÖ´Ù.
    
    SELECT  DENSE_RANK() OVER (ORDER BY ±Þ¿© desc) as ¼øÀ§, 
           À̸§, ºÎ¼­, Á÷Ã¥, ±Þ¿©
    FROM ±Þ¿© 
        
    - °á°ú..


¼øÀ§    À̸§    ºÎ¼­    Á÷Ã¥    ±Þ¿©
1    ¼ö¿µ    ¿µ¾÷ºÎ    °úÀå    380
2    ¼­¿¬    °³¹ßºÎ    ´ë¸®    350
3    ½á´Ï    °³¹ßºÎ    ´ë¸®    330
4    È¿¿¬    °ü¸®ºÎ    °úÀå    320
5    À¯¸®    °³¹ßºÎ    »ç¿ø    300
6    Å¿¬    Áö¿øºÎ    »ç¿ø    250
7    Á¦½ÃÄ«    ¿µ¾÷ºÎ    »ç¿ø    220
7    Æ¼ÆÄ´Ï    °ü¸®ºÎ    »ç¿ø    220
8    À±¾Æ    Áö¿øºÎ    »ç¿ø    200

RANK()ÇÔ¼ö¿Í´Â ´Ù¸£°Ô 7À§·Î µ¿·üÀÎ Á¦½ÃÄ«,ƼÆÄ´Ï µÚ¿¡ À±¾Æ°¡ 8À§·Î ³ª¿À´Â°É ¾Ë¼ö ÀÖ´Ù.


4. NTILE ÇÔ¼ö

¾ÕÀÇ ÇÔ¼öµé °ú´Â Á¶±Ý ´Ù¸¥ °³³äÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ÁöÁ¤µÈ ¼ýÀÚ¿¡ ¸Â°Ô Á¤·ÄµÈ µ¥ÀÌÅÍ´Â ±ÕµîÇÏ°Ô ±×·ìÇÎÇÏ¿© ¼ø¹øÀ» ¸Å±â¸ç ³²´Â °³¼ö´Â ¾Õ¿¡¼­ ºÎÅÍ Çϳª¾¿ ´õÇؼ­ ±×·ìÇÎÀÌ µÈ´Ù.

SELECT  NTILE(4) OVER (ORDER BY ±Þ¿© desc) as ¼øÀ§, 
       À̸§, ºÎ¼­, Á÷Ã¥, ±Þ¿©
FROM ±Þ¿©

- °á°ú..NTILE()


¼øÀ§    À̸§    ºÎ¼­    Á÷Ã¥    ±Þ¿©
1    ¼ö¿µ    ¿µ¾÷ºÎ    °úÀå    380
1    ¼­¿¬    °³¹ßºÎ    ´ë¸®    350
1    ½á´Ï    °³¹ßºÎ    ´ë¸®    330
2    È¿¿¬    °ü¸®ºÎ    °úÀå    320
2    À¯¸®    °³¹ßºÎ    »ç¿ø    300
3    Å¿¬    Áö¿øºÎ    »ç¿ø    250
3    Á¦½ÃÄ«    ¿µ¾÷ºÎ    »ç¿ø    220
4    Æ¼ÆÄ´Ï    °ü¸®ºÎ    »ç¿ø    220
4    À±¾Æ    Áö¿øºÎ    »ç¿ø    200


ÃÑ 9°³ÀÇ µ¥ÀÌÅ͸¦ ±ÕµîÇÏ°Ô 4·Î ³ª´«ÈÄ ³ª¸ÓÁö 1ÀÇ µ¥ÀÌÅÍ´Â À§¿¡ ¼ø¹ø¿¡ Æ÷ÇÔ ½ÃŲ°É ¾Ë¼ö ÀÖ´Ù.

5. PARTITION BY 

À§ÀÇ ÇÔ¼öµé°ú °áÇÕ ÇÏ¿© »ç¿ëÇÏ´Â ÀÏÁ¾ÀÇ ¿É¼ÇÀ¸·Î ´ë»ó ÇàµéÀÇ °á°ú ÁýÇÕÀ» ÆÄƼ¼ÇÀ» ³ª´©¾î ±× ÆÄƼ¼Ç ¾È¿¡¼­ ¼øÀ§¸¦ ¸Å±â±â À§ÇØ »ç¿ëµÈ´Ù. 

SELECT  RANK() OVER (PARTITION BY ºÎ¼­ ORDER BY ±Þ¿© desc) as ¼øÀ§, 
       À̸§, ºÎ¼­, Á÷Ã¥, ±Þ¿©
FROM ±Þ¿©

- °á°ú..
¼øÀ§    À̸§    ºÎ¼­    Á÷Ã¥    ±Þ¿©
1    ¼­¿¬    °³¹ßºÎ    ´ë¸®    350
2    ½á´Ï    °³¹ßºÎ    ´ë¸®    330
3    À¯¸®    °³¹ßºÎ    »ç¿ø    300
1    È¿¿¬    °ü¸®ºÎ    °úÀå    320
2    Æ¼ÆÄ´Ï    °ü¸®ºÎ    »ç¿ø    220
1    ¼ö¿µ    ¿µ¾÷ºÎ    °úÀå    380
2    Á¦½ÃÄ«    ¿µ¾÷ºÎ    »ç¿ø    220
1    Å¿¬    Áö¿øºÎ    »ç¿ø    250
2    À±¾Æ    Áö¿øºÎ    »ç¿ø    200

À§ÀÇ °á°ú´Â ºÎ¼­º° ±Þ¿© ¼øÀ§¸¦ ¸Å±ä °ÍÀÌ´Ù. º¸´Â ¹Ù¿Í °°ÀÌ ºÎ¼­º°·Î ±Þ¿©¿¡ µû¶ó ¼øÀ§¸¦ ¸Å±â¸ç À̸¦ ÀÀ¿ëÇÏ¸é ºÎ¼­º°,Á÷Ã¥º° µîÀÇ ´ÙÁß ±×·ì¿¡ ´ëÇØ ÆÄƼ¼ÇÀ» ³ª´«ÈÄ ¼øÀ§¸¦ ³ªÅ¸³¾¼ö ÀÖ´Ù.

¶ÇÇÑ ÀζóÀÎ ºä¸¦ È°¿ëÇÏ¸é ºÎ¼­º° ƯÁ¤ µî¼öµîÀÇ Á»´õ ¼¼ºÐÈ­µÈ ¼øÀ§ µ¥ÀÌÅ͸¦ ÃßÃâÇØ ³¾ ¼ö ÀÖ´Ù.

ÀÌ»óÀ¸·Î SQL Server 2005ÀÇ »õ·Î¿î ¼øÀ§ÇÔ¼ö(ºÐ¼®ÇÔ¼ö)¸¦ ¾Ë¾Æº¸¾Ò´Ù!!!

 
¡Ø Ȥ½Ã µµ¿òÀÌ µÇ¼Ì´Ù¸é ´ñ±Û¿¡ ÇѸ¶µð ³²°ÜÁÖ¼¼¿ä!
ÀÛ¼ºÀÚ   ºñ¹Ð¹øÈ£
ÀÚµ¿±Û ¹æÁö     (ÀÚµ¿±Û ¹æÁö ±â´ÉÀÔ´Ï´Ù.)
³»¿ë   ´ñ±Û´Þ±â 
À̸ÞÀÏ ¹®ÀÇ : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.