【问题标题】:Top 2 of each category每个类别的前 2 名
【发布时间】:2022-01-20 18:56:24
【问题描述】:

我需要每种类型的前 2 个口袋妖怪。 我有这个代码:

SELECT 
 [Name], 
 [Type 1],
 Total,
 rank() OVER(partition by [Type 1] order by Total,Hp,Attack,Defense,Speed,# desc) AS Ranking
FROM PokemonProject..Pokemon

结果表是这样的:

<table>
<thead>
<tr>
<th>Name    </th>
<th>Type 1</th>
<th>Total   </th>
<th>Ranking</th>
</tr>
</thead>
<tbody>
<tr>
<td>Xerneas</td>
<td>Fairy</td>
<td>680</td>
<td>1</td>
</tr>
<tr>
<td>Florges</td>
<td>Fairy</td>
<td>552</td>
<td>2</td>
</tr>
<tr>
<td>Ho-oh           </td>
<td>Fire</td>
<td>680</td>
<td>1</td>
</tr>
<tr>
<td>CharizardMega Charizard X           </td>
<td>Fire</td>
<td>634</td>
<td>2</td>
</tr>
<tr>
<td>CharizardMega Charizard Y           </td>
<td>Fire</td>
<td>634</td>
<td>3</td>
</tr>
</tbody>
</table>

我知道我需要一个 WHERE 子句,但我不知道该怎么做。类似于“排名

【问题讨论】:

  • 您使用的是 MySQL 还是 SQL-Server? [] 列名周围是 SQL-Server 语法。
  • 你确定不是排名错字而不是排名?

标签: mysql sql


【解决方案1】:

鉴于您的查询返回您期望的结果,以下是您可以应用 where 子句的一种方法:

WITH cte AS 
(
    SELECT 
     [Name], 
     [Type 1],
     Total,
     rank() OVER(partition by [Type 1] order by Total,Hp,Attack,Defense,Speed,# desc) AS Ranking
    FROM PokemonProject..Pokemon
)    
 WHERE Ranking <= 2

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2017-06-21
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多