分析每个城市的会员积分排名情况,列出城市、用户名、积分和排名(列名为ranking)。语句是
时间: 2024-03-23 10:39:06 浏览: 15
假设有三个表:用户表(user)、订单表(order)和订单详情表(order_detail)。其中用户表包含用户的姓名和所在城市,订单表包含用户id和订单id,订单详情表包含订单id和订单积分。以下是分析每个城市的会员积分排名情况,列出城市、用户名、积分和排名(列名为ranking)的 SQL 语句:
```sql
SELECT city, name, score,
(SELECT COUNT(*)+1 FROM (
SELECT SUM(score) as total_score
FROM order_detail
JOIN order ON order_detail.order_id = order.id
JOIN user ON order.user_id = user.id
WHERE user.city = u.city
GROUP BY order.user_id
HAVING total_score > SUM(order_detail.score)
) t) as ranking
FROM user u
JOIN order ON u.id = order.user_id
JOIN order_detail ON order.id = order_detail.order_id
GROUP BY u.id, city, name, score
HAVING SUM(order_detail.score) > 0
ORDER BY city, ranking;
```
首先通过 JOIN 连接三个表,得到每个用户的姓名、城市和订单积分信息。然后通过子查询,对于每个城市计算出每个用户的积分排名,并将排名作为一个新的列添加到结果集中。最后将结果按照城市和排名进行排序。