You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chart控件合并重复сoach项并汇总total值的技术咨询

问题

使用C#结合PostgreSQL填充Chart控件(chartRate)时,当前每一行数据都会在Chart中作为独立值显示。需要将数据表groupfit的сoach列中内容相同的项合并,对对应的total列数值求和,并按求和后的total值排序展示。

原实现代码:

private void fillshar()
{
    // 我正在使用PostgreSQL进行查询。
    string selectQuery = "SELECT сoach,total FROM groupfit";
    NpgsqlCommand command = new NpgsqlCommand(selectQuery, conn);
    NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command);
    DataTable table = new DataTable();
    adapter.Fill(table);

    //chartRate 是Chart控件实例
    chartRate.DataSource = table;
    chartRate.Series["total"].XValueMember = "сoach";
    chartRate.Series["total"].YValueMembers = "total";
    chartRate.Titles.Add("最受欢迎教练评分");
}

字段说明:

  • сoach:存在重复的字符串字段,需合并相同内容的项;
  • total:数值型字段,需按сoach分组求和,并以此排序展示。

数据表记录展示:
数据表记录展示

当前Chart展示效果:
当前Chart展示效果

解决方案

核心是在数据获取阶段完成分组求和与排序,推荐优先通过SQL实现,效率更高。

  1. 修改SQL查询语句
    直接在PostgreSQL中完成分组求和与排序,返回处理后的数据:
SELECT сoach, SUM(total) AS total_sum FROM groupfit GROUP BY сoach ORDER BY total_sum DESC;
  • SUM(total):计算每个教练的总评分;
  • GROUP BY сoach:按教练名称分组合并;
  • ORDER BY total_sum DESC:按总评分降序排列(需升序则去掉DESC)。
  1. 调整C#代码适配新数据
    修改Chart的Y值绑定字段为求和后的total_sum:
private void fillshar()
{
    string selectQuery = "SELECT сoach, SUM(total) AS total_sum FROM groupfit GROUP BY сoach ORDER BY total_sum DESC";
    NpgsqlCommand command = new NpgsqlCommand(selectQuery, conn);
    NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command);
    DataTable table = new DataTable();
    adapter.Fill(table);

    chartRate.DataSource = table;
    chartRate.Series["total"].XValueMember = "сoach";
    // 绑定到求和后的字段
    chartRate.Series["total"].YValueMembers = "total_sum";
    chartRate.Titles.Add("最受欢迎教练评分");
    // 强制刷新Chart确保数据更新
    chartRate.DataBind();
}
  1. 备选:C#端通过LINQ处理数据
    如果有特殊业务逻辑需要在代码中处理数据,可使用LINQ分组求和:
private void fillshar()
{
    string selectQuery = "SELECT сoach,total FROM groupfit";
    NpgsqlCommand command = new NpgsqlCommand(selectQuery, conn);
    NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command);
    DataTable table = new DataTable();
    adapter.Fill(table);

    // LINQ分组求和并排序
    var groupedData = table.AsEnumerable()
                           .GroupBy(row => row.Field<string>("сoach"))
                           .Select(g => new 
                           {
                               Coach = g.Key,
                               TotalSum = g.Sum(row => row.Field<int>("total"))
                           })
                           .OrderByDescending(x => x.TotalSum)
                           .ToList();

    chartRate.DataSource = groupedData;
    chartRate.Series["total"].XValueMember = "Coach";
    chartRate.Series["total"].YValueMembers = "TotalSum";
    chartRate.Titles.Add("最受欢迎教练评分");
    chartRate.DataBind();
}

内容的提问来源于stack exchange,提问作者zorax8137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:23:09