zoukankan      html  css  js  c++  java
  • NHibernate说探——聚合函数

    这里以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子句的。

  • 相关阅读:
    leetcode刷题笔记 273题 整数转换英文表示
    leetcode刷题笔记 278题 第一个错误的版本
    leetcode刷题笔记 268题 丢失的数字
    leetcode刷题笔记 264题 丑数 II
    leetcode刷题笔记 263题 丑数
    20210130日报
    20210129日报
    20210128日报
    20210127日报
    20210126日报
  • 原文地址:https://www.cnblogs.com/jams742003/p/1626414.html
Copyright © 2011-2022 走看看