房多多sql面试题:对数据分组后,再对每个分组内的数据按字母顺序给定编号

在这里插入图片描述以上是笔试题

建立对应的数据表test

CREATE TABLE `test` (
  `name` varchar(128) DEFAULT NULL,
  `group` varchar(128) DEFAULT NULL,
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

数据如下:
在这里插入图片描述对应的sql(请教了一个同学,提供的方案)

  SELECT 
    t.group,
    t.name, 
    (SELECT COUNT(*) FROM test t1 WHERE t1.`group` = t.`group`) - (SELECT COUNT(*) FROM test t1 WHERE t1.`group` = t.`group` AND t1.`name` > t.name) AS i    
  FROM
    `test` t    
  ORDER BY `group` ASC,
    `name` ASC 

主要是这个sql的执行过程:从test t表中取出一行数据group, name后 将其传入as i所在那行sql,计算出结果后得到i值,然后继续重复以上过程。

更新2024-07-18:
方法2:
WITH RECURSIVE cte
AS
(
SELECT ‘’ as name, group, 1 as n from test group by group
UNION ALL
SELECT t.* ,n+1 as n FROM test t JOIN
(
select max(n), group from cte group by group
) tmp
ON (t.group = tmp.group )
)
SELECT cte.* FROM cte WHERE name != ‘’;

参考
在这里插入图片描述在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值