假设数据表名称为“sales”,有以下字段:city(城市名称)、category(类别名称)、amount(销售额)。则可以使用以下SQL语句来解决问题:
SELECT city, category
FROM
(
SELECT city, category, ROW_NUMBER() OVER (PARTITION BY city ORDER BY SUM(amount) DESC) as rn
FROM sales
GROUP BY city, category
) t
WHERE t.rn = 1
该查询会首先对“sales”表按照城市和类别进行分组,并计算每个组内销售额的总和。然后使用ROW_NUMBER()函数为每个城市内的组进行排序,并将排名为1的组作为该城市最受欢迎的类别。最后,外层SELECT语句会选择排名为1的组,并返回城市名称和类别名称两个字段。
注:该查询还可以使用DENSE_RANK()函数来进行排名,示例中使用的是ROW_NUMBER()函数。