MYSQL及C#的实现排名的不同方法

最近需求是需要根据用户的积分进行排名。数据库使用的是mysql5.6
应该是不支持rank()函数。
然后用sql实现:

SELECT
  obj.beneficiaryID,
  obj.JF,
  CASE WHEN @rowtotal = obj.JF THEN @rownum WHEN @rowtotal := obj.JF THEN @rownum := @rownum + 1 WHEN @rowtotal = 0 THEN @rownum := @rownum + 1 END AS rownum
FROM (SELECT
	a.beneficiaryID,
	SUM( b.Point ) AS JFPOINT 
FROM xngdpoints a
	JOIN isms_sys_pointcategorydetail b ON a.operationType = b.OpertorUserIDType 
GROUP BY
	a.beneficiaryID )AS obj,
     (SELECT
         @rownum := 0,
         @rowtotal := NULL) r

然后发现可能是超长还是什么,执行sql出来没有数据。就想着那就先执行完sql,来处理datatable

	if (result != null && result.Rows.Count > 0)
	{
		result.Columns.Add("rownum", typeof(int));
		count = result.Rows.Count;
		// 排名
		DataTable newdt = new DataTable();
		newdt = result.Copy();
		int j = count;
		foreach (DataRow dow in newdt.Rows)
		{
			foreach (DataRow row in result.Select("JF ='" + dow["JF"] + "'"))
			{
				row["rownum"] = j;
			}
			
			j--;
		}
		// 再次排序然后分页
		DataView dv = result.DefaultView;
		dv.Sort = " rownum asc ";
		result = dv.ToTable();
		DataTable newDT = new DataTable();
		newDT = result.Clone();
		DataRow[] rows = result.AsEnumerable().Skip((pageIndex - 1) * pageNum).Take(pageNum).ToArray();
		foreach (DataRow item in rows)
		{
			newDT.ImportRow(item);
		}
		result = newDT;
	}

最后的效果图如图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值