后端框架:ssm
前端框架:layUi
问题:做统计时、需要把获取到数据的序号拿到、前端展示时、根据 layUi 自带的排序则可。导出成 excel 的时候也要显示序号、由于统一用 ExcelField 导出数据、只能在原有的 SQL 上拿到序号。
创建表就不留有 SQL 了、随意创建一张表就可以了。
解析:
@ 后面跟个名字,表示自定义变量。
:= 赋值的意思
自定义一个变量、每次查出数据候进行加 1 ,以此来作为数据源的序号。
SQL:
SELECT
@rank :=@rank + 1 AS 'num',
a.count AS 'count',
a.NAME AS 'name',
a.officeName AS 'officeName'
FROM(
SELECT
count(a.id) AS 'count',
u.NAME AS 'name',
o.NAME AS 'officeName'
FROM
crm_client a
LEFT JOIN sys_user u ON u.id = a.user_id
LEFT JOIN sys_office o ON u.office_id = o.id
WHERE
a.del_flag = '0'AND a.user_id IS NOT NULL
GROUP BY a.user_id
ORDER BY count DESC,a.NAME DESC
) a,
(SELECT @rank := 0) b
因为有排序问题、如果直接将 rank 定义在源数据中、按照自定义排序的话、获取序号的会根据自定义的排序产生乱序、排序完候在重新取出来时、会按照查询出的数据源进行顺序排序。
关于:
SET @rank = 0; 作用是一致的、但是放在 MyBaits 中貌似不识别。还是建议使用上面