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 ...
随机推荐
- alloc_skb申请函数分析
alloc_skb()用于分配缓冲区的函数.由于"数据缓冲区"和"缓冲区的描述结构"(sk_buff结构)是两种不同的实体,这就意味着,在分配一个缓冲区时,需要 ...
- Codeforces 808G Anthem of Berland - KMP - 动态规划
题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个字符串$s$,和一个字符串$t$,$t$只包含小写字母,$s$包含小写字母和通配符'?'.询问$t$可能在$s$中出现最多多少次. 原 ...
- Python3基础 response.read 输出网页的源代码
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- thinkphp留言板开发笔记 1 - 新的
关于php数组的排序函数的总结: 有很多种排序方式和排序规则: 正常排序和反向排序, 使用 -r来表示 排序时是否考虑索引/下标, 如果考虑则加上-a, a=associate. sort是按值来排序 ...
- SpringBoot Mybatis 分页插件PageHelper
添加maven配置: <!-- 分布插件 --> <dependency> <groupId>com.github.pagehelper</groupId&g ...
- MySQL删除数据库时无响应解决办法
删除远程主机上MySQL中的一个数据库时,远程主机一直在响应,无法正常删除. 这个问题的解决办法如下:在远程主机上登录MySQL,执行show full processlist;观察state和inf ...
- How to search for ? (question mark) in Excel
The ? is a wildcard which represents a single character, and the * is a wildcard character that repr ...
- 论文笔记之:Graph Attention Networks
Graph Attention Networks 2018-02-06 16:52:49 Abstract: 本文提出一种新颖的 graph attention networks (GATs), 可 ...
- 多线程tips(面试常用)
描述线程和进程的区别? 我们运行一个exe,就是一个进程实例,系统中有很多个进程.每一个进程都有自己的内存地址空间,每个地址相当于一个独立的边界,有自己独占的资源,进程之间不能共享代码和数据空间.(可 ...
- Kubernetes之Controllers一
ReplicaSet is the next-generation Replication Controller. The only difference between a ReplicaSet a ...