NHibernate说探——聚合函数

简介: 这里以Northwind数据库为示例数据库 示例数据表:Products 现在只用产品表中部分字段。 持久类如下: public class Products     {         public virtual int ProductID { get; set; }       ...

这里以Northwind数据库为示例数据库

示例数据表:Products

现在只用产品表中部分字段。

持久类如下:

public class Products

    {

        public virtual int ProductID { get; set; }

        public virtual string ProductName { get; set; }

        public virtual int CategoryID { get; set; }

        public virtual float Price { get; set; }

    }

 

映射文件如下:

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Entities">

  <class name="Products" table="Products">

    <id name="ProductID" column="ProductID">

      <generator class="identity"></generator>

    </id>

    <property name="ProductName" column="ProductName" type="String"></property>

    <property name="CategoryID" column="CategoryID" type="Int32"></property>

    <property name="Price" column="UnitPrice" type="Single"></property>

  </class>

</hibernate-mapping>

开始

(一)Avg(平均值)

IQuery q = _session.CreateQuery("select avg(Price) from Products where CategoryID=2");

        return Convert.ToSingle(q.List()[0]);

        查询类型为2的所有产品的平均售价

        ·对于平均值来说,结果是一个,但返回的还是一个集合。

(二)Max(最大的)

IQuery q = _session.CreateQuery("select max(Price) from Products");

        return Convert.ToSingle(q.List()[0]);

查询最大的价格

(三)Min(最小的)

IQuery q = _session.CreateQuery("select min(Price) from Products");

return Convert.ToSingle(q.List()[0]);

查询最低的价格

(四)Count

IQuery q = _session.CreateQuery("select count(*) from Products");

return Convert.ToSingle(q.List()[0]);

查询总数

这里穿插一下distinct用法。

采上Employees

查询城市数目:

IQuery q = _session.CreateQuery("select count(City) from Employees");

return Convert.ToSingle(q.List()[0]);

查询不重复的城市数目

       IQuery q = _session.CreateQuery("select count(distinct City) from Employees");

(五)Sum(求和)

IQuery q = _session.CreateQuery("select sum(Price) from Products where CategoryID=2");

return Convert.ToSingle(q.List()[0]);

求和类别为2的产品的总价格

Order by

(六)Order by

(1) 单属性排序

IQuery q = _session.CreateQuery("select Price from Products p order by Price");

        return q.List<float>();

(2)  多属性排序

IQuery q = _session.CreateQuery("select Price from Products p order by Price,ProductID desc");

    return q.List<float>();

(七)Group by

(1)单属性分组

IQuery q = _session.CreateQuery("select CategoryID from Products group by CategoryID");

return q.List<int>();

 

以产品类别分组,这里要注意的是返回的类型。在上一篇中我说明了这里的理解方式。

(2)多属性分组及聚合

IQuery q = _session.CreateQuery("select CategoryID,count(*) from Products group by CategoryID");

return q.List<object[]>() as List<object[]>;

这里以产品类别分组,并取得每个类别的数目。这里得到的是一个多对象多属性集合。可以得到一个object数据组的泛型集合。对于这种类型的转化,在上一篇中已经说明。

(3)Having属性

IQuery q = _session.CreateQuery("select CategoryID,count(*) from Products group by CategoryID having count(*)>10");

     return q.List<object[]>() as List<object[]>;

这里以产品类别分组,并取得每个类别的数目,且类别产品数目在10个以上的保留。

这是HQL查询,是支持having子句的。

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
6月前
|
关系型数据库 MySQL
Mysql基础第十七天,使用子查询
Mysql基础第十七天,使用子查询
32 0
|
3月前
|
SQL 数据挖掘 数据库
SQL 子查询深度剖析来袭!嵌套查询竟有如此无限可能,带你轻松玩转复杂数据检索与操作!
【8月更文挑战第31天】在 SQL 中,子查询是一种强大的工具,允许在一个查询内嵌套另一个查询,从而实现复杂的数据检索和操作。子查询分为标量子查询、列子查询和行子查询,可用于 SELECT、FROM、WHERE 和 HAVING 子句中。例如,查找年龄大于平均年龄的学生或每个课程中成绩最高的学生。子查询具有灵活性、可重用性和潜在的性能优化优势,但需注意性能问题、可读性和数据库支持。合理使用子查询能够显著提升查询效率和代码维护性。
73 0
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(一)
【SQL应知应会】分析函数的点点滴滴(一)
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(二)
【SQL应知应会】分析函数的点点滴滴(三)
112 0
|
SQL 移动开发 Oracle
【SQL应知应会】分析函数的点点滴滴(三)
【SQL应知应会】分析函数的点点滴滴(三)
134 0
|
存储 SQL 数据库
【机房重构】组合查询—存储过程
【机房重构】组合查询—存储过程
44 0
|
SQL 移动开发 BI
【SQL开发实战技巧】系列(二十二):数仓报表场景☞ 从分析函数效率一定快吗聊一聊结果集分页和隔行抽样实现方式
怎样对SQL查询结果集分页比较好、平时你用分析函数优化传统查询,所以你会不会认为分析函数一定比传统查询效率高?一个实验告诉你答案、我想对数据进行隔行抽样应该怎么实现?【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。分析查询的一个小建议,可能大家平时为了方便,用row_number做分页的比较多,但是在有些场景,这个效率真的挺低。
【SQL开发实战技巧】系列(二十二):数仓报表场景☞ 从分析函数效率一定快吗聊一聊结果集分页和隔行抽样实现方式
|
SQL XML Java
MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!
MyBatis封装了JDBC通过Mapper代理的方式,以前繁琐的操作通过“属性与字段映射”就简单化解,MyBatis的动态SQL完美展现了DBMS的独特魅力
450 0
MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!