该例以学生信息表为例,将学生信息按年级和性别分组,统计各年级男生和女生的人数、总成绩和平均成绩,并将查询结果按平均成绩降序排列。下图是原数据表staq:
【C#实现过程】
(1)创建一个名为StudentGroup的窗体应用程序,为窗体添加一个DataGridView控件(命名为dGVStudent)。
(2)重写窗体OnLoad事件函数,添加查询代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace StudentGroup
{public partial class Form1 : Form{public Form1(){InitializeComponent();}protected override void OnLoad(EventArgs e){//创建数据库连接SqlDataAdapter adapter = new SqlDataAdapter(@"SELECT grade AS 年级,sexy AS 性别,COUNT(*) AS 人数,SUM(result) AS 总成绩,AVG(result) AS 平均成绩 FROM staq_info GROUP BY grade,sexy ORDER BY 5 DESC","Data Source=.\\SQLExpress;Database=aq;Trusted_Connection=true;");DataSet dataSet = new DataSet(); //创建数据集adapter.Fill(dataSet); //用查询结果填充数据集dGVStudent.DataSource = dataSet.Tables[0]; //将数据集绑定到控件}}
}
本实例代码主要通过SQL语句实现对数据表的分组统计和排序。首先创建SqlDataAdapter执行数据表查询操作,然后将查询结果填充到DataSet对象中,最后将DataSet中的数据表绑定到DataGridView控件上。
在数据表的查询中,一旦进行了分组,就只能得到分组的相关信息。在SQL语句中主要通过COUNT、SUM、MAX、MIN和AVG五个关键字获取分组的相关信息,其中,COUNT表示记录数目,SUM表示字段值求和,MAX表示字段最大值,MIN表示字段最小值,AVG表示字段平均值。对数据表进行分组主要通过GROUP BY关键字。实现对某一字段进行排序则使用ORDER BY关键字,如果需要按降序排列,则在后面加上DESC关键字。实例代码的SQL语句中还用到了AS关键字,该关键字用于为字段的统计结果设置一个别名,当查询结果在控件上显示时,可以为该字段对应的列记录显示该别名
运行C#代码:
---------------------------------视图查询 ----------------------------
以原数据表staq为例,创建一个含有学号和姓名的视图,将视图中的信息设置为按学生成绩降序排列,且只显示前9条信息。通过查询该视图可直接获取成绩排在前9名的学生学号和姓名
1.新建视图 2.添加数据表
3.将staq_info表中的id和name字节添加到视图中,并按成绩(result)降序排列 :
SELECT TOP (50) PERCENT id AS 学号, name AS 姓名
FROM dbo.staq_info ORDER BY result DESC
- 百分比与行数:
TOP (50) PERCENT
会选取表中大约50%的行数。如果表中的行数是一个奇数,那么TOP (50) PERCENT
将四舍五入到最接近的整数。 - 排序:由于您使用了
ORDER BY result DESC
,结果将按照result
列的值从高到低排列。 - 列重命名:
AS
关键字用于为列指定别名,这样查询结果中的列标题将显示为“学号”和“姓名”,而不是原始的列名id
和name
。
4.视图保存名为:staqView
5.重写窗体的OnLoad事件函数,添加查询代码如下:
protected override void OnLoad(EventArgs e)
{
//创建数据集连接
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM staqView",
"Data Source=.\\SQLExpress;Database=aq;Trusted_Connection=true;");
DataSet dataSet = new DataSet(); //创建数据集
adapter.Fill(dataSet); //用查询结果填充数据集
dGVStudent.DataSource = dataSet.Tables[0]; //将数据集绑定到控件
}
6.运行C#代码: