在低于8.0版本的mysql中,我要a表关联b表取bsdp_name字段,然后要根据a表中的qtc字段降序排列,效果要和hive的dense_rank一样排名并列,最后要返回bsdp_name、qtc、排名列,怎么写
时间: 2024-03-01 13:52:19 浏览: 50
泛微Ecology8.0数据库字典、数据库表结构及表字段定义
在低于8.0版本的 MySQL 中,可以使用子查询和变量来模拟 dense_rank 的效果。以下是一种可能的 SQL 语句:
```
SELECT b.bsdp_name, a.qtc, @rank := @rank + (@last_qtc <> a.qtc) AS rank
FROM (
SELECT qtc, b_id
FROM a
ORDER BY qtc DESC
) AS a
JOIN b ON a.b_id = b.id
JOIN (SELECT @rank := 0, @last_qtc := NULL) AS vars
ORDER BY a.qtc DESC
```
这个 SQL 语句首先对表 a 进行子查询排序,然后再通过 JOIN 关联表 b。在 SELECT 语句中使用变量 @rank 来记录排名,如果当前行的 qtc 和上一行的不同,就将排名加一。最后返回 bsdp_name、qtc 和排名列。注意,这个 SQL 语句可能不太高效,如果数据量较大,可能会有性能问题。
阅读全文