Skip to content
FreeSql 官方文档FreeSql 官方文档
指南
扩展
服务支持
github icon
  • 指南

      • 查询
        • 分页查询
          • 单表查询
            • 多表查询
              • 分组聚合
                • GroupBy分组聚合
                  • API
                  • 返回数据 ✨
                    • 延时加载
                      • 贪婪加载 ✨
                        • LinqToSql
                          • WithSql
                            • 树型查询 ✨
                            • DB First
                              • 表达式函数
                                • 事务
                                  • 过滤器
                                    • ADO
                                      • AOP✨
                                        • 读写分离
                                          • 分表分库
                                            • 多租户
                                              • 性能
                                                • 你不知道的功能 ✨

                                                分组聚合

                                                author iconnicyecalendar icon2021年2月5日timer icon大约 2 分钟word icon约 474 字

                                                此页内容
                                                • GroupBy分组聚合
                                                • API

                                                # 分组聚合

                                                static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
                                                    .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10")
                                                    .Build(); //请务必定义成 Singleton 单例模式
                                                
                                                class Topic {
                                                    [Column(IsIdentity = true, IsPrimary = true)]
                                                    public int Id { get; set; }
                                                    public int Clicks { get; set; }
                                                    public string Title { get; set; }
                                                    public DateTime CreateTime { get; set; }
                                                }
                                                
                                                1
                                                2
                                                3
                                                4
                                                5
                                                6
                                                7
                                                8
                                                9
                                                10
                                                11

                                                # GroupBy分组聚合

                                                var list = fsql.Select<Topic>()
                                                    .GroupBy(a => new { tt2 = a.Title.Substring(0, 2), mod4 = a.Id % 4 })
                                                    .Having(a => a.Count() > 0 && a.Avg(a.Key.mod4) > 0 && a.Max(a.Key.mod4) > 0)
                                                    .Having(a => a.Count() < 300 || a.Avg(a.Key.mod4) < 100)
                                                    .OrderBy(a => a.Key.tt2)
                                                    .OrderByDescending(a => a.Count())
                                                    .ToList(a => new { a.Key, cou1 = a.Count(), arg1 = a.Avg(a.Value.Clicks) });
                                                //SELECT substr(a.`Title`, 1, 2) as1, count(1) as2, avg(a.`Id`) as3
                                                //FROM `Topic` a
                                                //GROUP BY substr(a.`Title`, 1, 2), (a.`Id` % 4)
                                                //HAVING (count(1) > 0 AND avg((a.`Id` % 4)) > 0 AND max((a.`Id` % 4)) > 0) AND (count(1) < 300 OR avg((a.`Id` % 4)) < 100)
                                                //ORDER BY substr(a.`Title`, 1, 2), count(1) DESC
                                                
                                                1
                                                2
                                                3
                                                4
                                                5
                                                6
                                                7
                                                8
                                                9
                                                10
                                                11
                                                12

                                                不分组求聚合值,请使用 ToAggregate 替代 ToList

                                                # API

                                                方法返回值参数描述
                                                ToSqlstring返回即将执行的 SQL 语句
                                                ToList<T>List<T>Lambda执行 SQL 查询,返回指定字段的记录,记录不存在时返回 Count 为 0 的列表
                                                ToList<T>List<T>string field执行 SQL 查询,返回 field 指定字段的记录,并以元组或基础类型(int,string,long)接收,记录不存在时返回 Count 为 0 的列表
                                                ToAggregate<T>List<T>Lambda执行 SQL 查询,返回指定字段的聚合结果(适合不需要 GroupBy 的场景)
                                                SumTLambda指定一个列求和
                                                MinTLambda指定一个列求最小值
                                                MaxTLambda指定一个列求最大值
                                                AvgTLambda指定一个列求平均值
                                                【分组】
                                                GroupBy<this>Lambda按选择的列分组,GroupBy(a => a.Name)
                                                GroupBy<this>string, parms按原生 sql 语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 })
                                                Having<this>string, parms按原生 sql 语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 })
                                                【成员】
                                                Key返回 GroupBy 选择的对象
                                                Value返回主表 或 From<T2,T3....> 的字段选择器
                                                edit icon在 GitHub 上编辑此页open in new window
                                                上次编辑于: 2022/5/23 上午10:38:02
                                                贡献者: igeekfan,luoyunchong
                                                上一页
                                                多表查询
                                                下一页
                                                返回数据 ✨
                                                Copyright © 2018-present nicye
                                                Copyright © 2022 nicye

                                                该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。

                                                详情