GROUP by 方法 C#
1、用两层循环计算,前提条件是数据已经按分组的列排好序的。
DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)), new DataColumn("sex", typeof(string)), new DataColumn("score", typeof(int)) }); dt.Rows.Add(new object[] { "张三","男",1 }); dt.Rows.Add(new object[] { "张三","男",4 }); dt.Rows.Add(new object[] { "李四","男",100 }); dt.Rows.Add(new object[] { "李四","女",90 }); dt.Rows.Add(new object[] { "王五","女",77 }); DataTable dtResult = dt.Clone(); for (int i = 0; i < dt.Rows.Count; ) { DataRow dr = dtResult.NewRow(); string name = dt.Rows[i]["name"].ToString(); string sex = dt.Rows[i]["sex"].ToString(); dr["name"] = name; dr["sex"] = sex; int score = 0; //内层也是循环同一个表,当遇到不同的name时跳出内层循环 for (; i < dt.Rows.Count; ) { if (name == dt.Rows[i]["name"].ToString()&&name == dt.Rows[i]["sex"].ToString()) { score += Convert.ToInt32(dt.Rows[i]["score"]); dr["score"] = score; i++; } else { break; } } dtResult.Rows.Add(dr);
}
dtResult中的数据即是最终结果。
2、 借助DataTable的Compute方法,DataTable中数据不用事先排好序。
] + "'"); //temp用来存储筛选出来的数据 DataTable temp = dtResult.Clone(); foreach (DataRow row in rows) { temp.Rows.Add(row.ItemArray); }
DataRow dr = dtResult.NewRow(); dr[0] = dtName.Rows[i][0].ToString(); dr[1] = temp.Compute("sum(score)", ""); dtResult.Rows.Add(dr);
}
3、使用linq to DataTable group by实现
var query = from t in dt.AsEnumerable() group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("sex") } into m select new { name = m.Key.t1, sex = m.Key.t2, score = m.Sum(n => n.Field<decimal>("score")) }; if (query.ToList().Count > 0) { query.ToList().ForEach(q => { Console.WriteLine(q.name + "," + q.sex + "," + q.score); }); }
收集整理,非原创
GROUP by 方法 C#的更多相关文章
- Oracle查询表里的重复数据方法:
一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...
- ORA-15260: permission denied on ASM disk group
向ASM磁盘组添加新的磁盘的时候,报了以下错误: $ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 2 ...
- ExpandableListView(三)只展开一个group,没有child不展开group
本文是自己在实践中,发现的问题. 有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group 在一个ExpandableListView ...
- signalr中Group 分组群发消息的简单使用
前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...
- MYSQL GROUP BY Optimization
GROUP BY Optimization 常规的匹配group by(分组)操作子句是扫整表并且创建包含连续的分组行的临时表, 利用临时表得到group数据,运用appregate function ...
- 查询订阅某topic的所有consumer group(Java API)
在网上碰到的问题,想了下使用现有的API还是可以实现的. 首先,需要引入Kafka服务器端代码,比如加入Kafka 1.0.0依赖: Maven <dependency> <grou ...
- 1.3 正则表达式和python语言-1.3.4使用 match()方法匹配字符串
1.3.4使用 match()方法匹配字符串(第一次写博客,格式,述语有不当之处还请见谅)2018-05-08 Python 代码是以Jupyter Notebook编写的,主要写的是python3的 ...
- Mysql按条件计数的几种方法
最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况.尝试了几种方法,下面简要记录,供大家参考. 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景. 从前有一个皇帝,他有 ...
- SQL操作语句之查询及删除重复记录的方法
delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...
随机推荐
- http 请求头大小写的问题
如果是默认消息头名称,消息头格式已经固定,即便输入的大小写有误,也会给你翻译成默认的写法,如果自己定义的,会自动给你翻译成小写,所以传参数的名称都用小写字母即可,否则可能取不到值,比如encrypte ...
- <线程池-定时任务> ScheduledExecutorService之shutdown引发的RejectedExecutionException问题
一. 问题描述 先来看一下异常信息,启动tomcat时就报错: 2015-3-20 15:22:39 org.apache.catalina.core.StandardContext listener ...
- Maven本地仓库引入自定义/第三方的jar
在cmd下输入如下: mvn install:install-file -Dfile=D:\ojdbc7.jar -DgroupId=com.tech4j.driver -DartifactId=or ...
- Install Virtualbox on ubuntu
1.Use the command: sudo apt-get install virtualbox
- 小白学习 Redis 数据库日记(2017-06-13)
redis 127.0.0.1:6379> LPUSH runoobkey redis(integer) 1redis 127.0.0.1:6379> LPUSH runoobkey mo ...
- Visual Studio Code配置Python开发环境
1.安装Python插件 在VScode界面按Crtl+Shift+P或者F1 输入ext install 直接安装Python,也就是点击它,然后等待,安装好后会提示你重启 2.配置运行Python ...
- Android Studio 快捷键、Debug的使用
https://blog.csdn.net/q908555281/article/details/49331371 1.快捷键 个人习惯常用快捷键 在Eclipse中常用的快捷键 ...
- (转载)WinformGDI+入门级实例——扫雷游戏(附源码)
本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游戏界面让我从 ...
- 【Mybatis】-- Mapper动态代理开发注意事项
1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...
- multiple definition of `qMain(int, char**)'
QT C++ 我上一分钟运行地好好的,下一分钟就无法通过编译了.查了半天发现在IDE自动生成的项目文件.pro中 main竟然包含了两遍.我对这表示很无语,我完全是通过IDE来操作,却产生一些我不易察 ...