zoukankan      html  css  js  c++  java
  • sql server分组排序并取出每组中的第一条数据

    使用SQL Server数据库在【分组排序并取出每组中的第一条数据】的场景下,很容易想到的是使用GROUP BY分组子句配合聚合函数。

    举个简单的例子,有一个YANGGBS表,表中有NAME和AGE两个字段,要求统计出每个NAME的最大AGE。

    SELECT AA.*
    FROM YANGGBS AA
        INNER JOIN (
            SELECT NAME, MAX(AGE)
            FROM YANGGBS
            GROUP BY NAME
        ) BB
            ON AA.NAME = BB.NAME

    另外一种方法就是使用开窗函数(分析函数),分组排序之后通过每个组中的顺序号来进行记录筛选。

    SELECT AA.*
    FROM YANGGBS AA
        INNER JOIN (
            SELECT NAME, ROW_NUMBER(PARTITION BY NAME ORDER BY AGE) AS RN
            FROM YANGGBS
        ) BB
            ON AA.NAME = BB.NAME AND BB.RN = 1

    更多的,这种方式在分页的实现上用途很大(通过RN进行顺序结果集筛选),几乎是数据库层面分页最好的解决方案。

    "抛硬币来决定吧,碎了我们就在一起。"

  • 相关阅读:
    IAccessible ( 一 )
    object sender,EventArgs e的一些讲解
    C# 操作符重载
    MSAA简介
    小试NArrange
    C++宏
    Ext.form.ComboBox简单用法
    SQL SERVER 收缩数据库的命令
    ext.grid的配置属性和方法
    磁盘阵列
  • 原文地址:https://www.cnblogs.com/yanggb/p/12307308.html
Copyright © 2011-2022 走看看