Guest User

Untitled

a guest
Oct 19th, 2017
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. -----------+-------+
  2. | name | value |
  3. -----------+-------+
  4. | John | 20 |
  5. | John | 7 |
  6. | John | 7 |
  7. -----------+-------+
  8.  
  9. WITH cte AS
  10. ( SELECT name, value,
  11. ROW_NUMBER() OVER (PARTITION BY name
  12. ORDER BY value DESC
  13. )
  14. AS rn
  15. FROM t
  16. )
  17. SELECT name, value, rn
  18. FROM cte
  19. WHERE rn <= 3
  20. ORDER BY name, rn ;
  21.  
  22. SELECT name, value, rn
  23. FROM
  24. ( SELECT name, value,
  25. ROW_NUMBER() OVER (PARTITION BY name
  26. ORDER BY value DESC
  27. )
  28. AS rn
  29. FROM t
  30. ) tmp
  31. WHERE rn <= 3
  32. ORDER BY name, rn ;
  33.  
  34. SELECT t.tid, t.name, t.value, -- self join and GROUP BY
  35. COUNT(*) AS rn
  36. FROM t
  37. JOIN t AS t2
  38. ON t2.name = t.name
  39. AND ( t2.value > t.value
  40. OR t2.value = t.value
  41. AND t2.tid <= t.tid
  42. )
  43. GROUP BY t.tid, t.name, t.value
  44. HAVING COUNT(*) <= 3
  45. ORDER BY name, rn ;
  46.  
  47.  
  48. SELECT t.tid, t.name, t.value, rn
  49. FROM
  50. ( SELECT t.tid, t.name, t.value,
  51. ( SELECT COUNT(*) -- inline, correlated subquery
  52. FROM t AS t2
  53. WHERE t2.name = t.name
  54. AND ( t2.value > t.value
  55. OR t2.value = t.value
  56. AND t2.tid <= t.tid
  57. )
  58. ) AS rn
  59. FROM t
  60. ) AS t
  61. WHERE rn <= 3
  62. ORDER BY name, rn ;
  63.  
  64. select distinct t.personid, val, rank
  65. from (select t.*,
  66. (select COUNT(distinct val) from t t2 where t2.personid = t.personid and t2.val >= t.val
  67. ) as rank
  68. from t
  69. ) t
  70. where rank in (1, 2, 3)
  71.  
  72. with t as (
  73. select 1 as personid, 5 as val union all
  74. select 1 as personid, 6 as val union all
  75. select 1 as personid, 6 as val union all
  76. select 1 as personid, 7 as val union all
  77. select 1 as personid, 8 as val
  78. )
  79. select distinct t.personid, val, rank
  80. from (select t.*,
  81. (select COUNT(distinct val) from t t2 where t2.personid = t.personid and t2.val >= t.val
  82. ) as rank
  83. from t
  84. ) t
  85. where rank in (1, 2, 3);
  86.  
  87. SELECT *
  88. FROM tbl t
  89. WHERE FIND_IN_SET(t.value,(SELECT
  90. SUBSTRING_INDEX(GROUP_CONCAT(t1.value ORDER BY VALUE DESC),',',3)
  91. FROM tbl t1
  92. WHERE t1.name = t.name
  93. GROUP BY t1.name)) > 0
  94. ORDER BY t.name,t.value desc
  95.  
  96. CREATE TABLE #list ([name] [varchar](100) NOT NULL, [value] [int] NOT NULL)
  97. INSERT INTO #list VALUES ('John', 20), ('John', 7), ('John', 7), ('John', 7), ('John', 4);
  98.  
  99. WITH cte
  100. AS (
  101. SELECT NAME
  102. ,value
  103. ,ROW_NUMBER() OVER (
  104. PARTITION BY NAME ORDER BY (value) DESC
  105. ) RN
  106. FROM #list
  107. )
  108. SELECT NAME
  109. ,value
  110. FROM cte
  111. WHERE RN < 4
  112. ORDER BY value DESC
  113.  
  114. if object_id('tempdb..#Data') is not null drop table #Data;
  115. GO
  116.  
  117. create table #data (name varchar(25), value integer);
  118. GO
  119. set nocount on;
  120. insert into #data values ('John', 20);
  121. insert into #data values ('John', 7);
  122. insert into #data values ('John', 7);
  123. insert into #data values ('John', 7);
  124. insert into #data values ('John', 5);
  125. insert into #data values ('Jack', 5);
  126. insert into #data values ('Jane', 30);
  127. insert into #data values ('Jane', 21);
  128. insert into #data values ('John', 5);
  129. insert into #data values ('John', -1);
  130. insert into #data values ('John', -1);
  131. insert into #data values ('Jane', 18);
  132. set nocount off;
  133. GO
  134.  
  135. with D as (
  136. SELECT
  137. name
  138. ,Value
  139. ,row_number() over (partition by name order by value desc) rn
  140. From
  141. #Data
  142. )
  143. SELECT Name, Value
  144. FROM D
  145. WHERE RN <= 3
  146. order by Name, Value Desc
  147.  
  148. Name Value
  149. Jack 5
  150. Jane 30
  151. Jane 21
  152. Jane 18
  153. John 20
  154. John 7
  155. John 7
Add Comment
Please, Sign In to add comment