zoukankan      html  css  js  c++  java
  • SELECT

    SELECT

    基本结构

    --语句顺序
    SELECT COLUNM_NAME    --COLUNM_NAME 字段名
    FROM TABLE_NAME       --表名
    WHERE                 --限制条件
    GROUP BY              --分组
    HAVING                --对分组后的结果进行筛选
    ORDER BY              --显示顺序,可以使用 select 中的别名
    
    --执行顺序
    -- FROM -- WHERE -- GROUP BY -- HAVING--SELECT -- ORDER BY 
    --OEDER BY 执行顺序在 SELECT 之后,所以可以使用别名。

    SELECT 子句

    SELECT (ALL) *   --查询所有字段,ALL可以不写,包含重复行。
    select select_list  --select_list:指定字段
    SELECT  DISTINCT *  --查询所有字段,ALL可以不写,不包含重复字段。
    SELECT TOP 10 *   -- 返回前 10 个未定义的行,因为此时没有使用 ORDER BY 子句
    SELECT PERCENT 10.1 *   --前 10.1% 的行。 小数部分的值向上舍入到下一个整数值

     

    GROUP BY 子句

    此时select 字句中的字段要么是在group by中的字段、要么是聚合函数。

    1.表格:

     CREATE TABLE Sales ( Country varchar(50), Region varchar(50), Sales int );
    
    INSERT INTO sales VALUES (N'Canada', N'Alberta', 100);
    INSERT INTO sales VALUES (N'Canada', N'British Columbia', 200);
    INSERT INTO sales VALUES (N'Canada', N'British Columbia', 300);
    INSERT INTO sales VALUES (N'United States', N'Montana', 100);

    2.允许形式:

    SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA, ColumnB;  
    SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA, ColumnB;  
    SELECT ColumnA + ColumnB FROM T GROUP BY ColumnA + ColumnB;  
    SELECT ColumnA + ColumnB + constant FROM T GROUP BY ColumnA, ColumnB;
    ROW_NUMBER() OVER(ORDER BY 字段1 DESC)    as RN
    --是先把字段1降序,再为降序以后的每条记录返回一个序号
    ROW_NUMBER() OVER (partition BY  字段1  ORDER BY 字段2) AS RN 
    --表示根据字段1分组,在分组内部根据字段2排序,返回排序值

    3.GROUP BY ROLLUP

    为每个列表达式的组合创建一个组。 此外,它将结果“汇总”到小计和总计。 为此,它会从右向左减少创建的组和聚合的列表达式的数量。

    例如,GROUP BY ROLLUP (col1, col2, col3, col4) 为以下列表中的每个列表达式组合创建组。

    • col1、col2、col3、col4
    • col1、col2、col3、NULL       --col1、col2、col3的小计
    • col1、col2、NULL、NULL    --col1、col2的小计
    • col1、NULL、NULL、NULL   --col1的小计
    • NULL、NULL、NULL、NULL - 这是总计

    4.GROUP BY CUBE

    GROUP BY CUBE 为所有可能的列组合创建组。 对于 GROUP BY CUBE (a, b),结果具有 (a, b)、(NULL, b)、(a, NULL) 和 (NULL, NULL) 唯一值的组

    5.GROUP BY GROUPING SETS()

    GROUPING SETS 选项可将多个 GROUP BY 子句组合到一个 GROUP BY 子句中。 其结果与针对指定的组执行 UNION ALL 运算等效。

    SELECT Country, Region, SUM(Sales) AS TotalSales
    FROM Sales
    GROUP BY GROUPING SETS ( ROLLUP (Country, Region), CUBE (Country, Region) );
    
    
    --等效于
    SELECT Country, Region, SUM(Sales) AS TotalSales
    FROM Sales
    GROUP BY ROLLUP (Country, Region)
    UNION ALL
    SELECT Country, Region, SUM(Sales) AS TotalSales
    FROM Sales
    GROUP BY CUBE (Country, Region);

    SQL 不会合并为 GROUPING SETS 列表生成的重复组。在 GROUP BY ( (), CUBE (Country, Region) ) 中,两个元素都返回总计行并且这两行都会列在结果中。

    6.GROUP BY ()

    指定生成总计的空组。 这作为 GROUPING SET 的元素之一来说非常有用。 例如,此语句给出每个国家/地区的总销售额,然后给出了所有国家/地区的总和。

    SELECT Country, SUM(Sales) AS TotalSales
    FROM Sales
    GROUP BY GROUPING SETS ( Country, () );

    7.配合子句

    经常与order by 字句、having 字句连用。

    HAVING  子句

    对GROUP BY 字句中的结果进行筛选。

    HAVING  子句

    可以使用select 子句中的别名

    类别作为特征的语法元素
    基本语法 ORDER BY
    指定升序和降序 DESC • ASC
    指定排序规则 COLLATE
    指定条件顺序 CASE 表达式
    在排名函数中使用 ORDER BY 排名函数
    限制返回的行数 OFFSET • FETCH
    将 ORDER BY 与 UNION、EXCEPT 和 INTERSECT 一起使用 ORDER BY 必须放到最后使用

    在与 SELECT…INTO 语句一起使用以从另一来源插入行时,ORDER BY 子句不能保证按指定的顺序插入这些行。

    在视图中使用 OFFSET 和 FETCH 并不会更改该视图的 Updateability 属性?

    OVER  子句

    参考:https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-2017

    APPLY 子句

    参考:https://docs.microsoft.com/zh-cn/sql/t-sql/queries/from-transact-sql?view=sql-server-2017

    JOIN  子句

    1.LEFT  JOIN 

    2.RIGHT  JOIN 

    3.FULL JOIN

    4.CROSS  JOIN 

    5.INNER  JOIN 

     

    PIVOT 与UNPIVOT  子句.

    参考:https://www.cnblogs.com/hbwy/p/4914000.html

    1.PIVOT

    行转列

    TABLE_SOURCE AS P
    
    PIVOT( 聚合函数(value_column) FOR  P.pivot_column  IN(<column_list>) AS T
    SELECT  * FROM Guocheng .DBO.每日消费  AS P
    PIVOT (SUM(数值) FOR 数据类型 in ([展现],[点击],[消费])) as t 
    where 日期 >='2019-06-08' 

    2.UNPIVOT 

    列转行

    TABLE_SOURCE AS P
    UNPIVOT( value_column FOR P.pivot_column  IN(<column_list>) AS U
    )
    select * from 
    (SELECT  * FROM Guocheng .DBO.每日消费  AS P
    PIVOT (SUM(数值) FOR 数据类型 in ([展现],[点击],[消费])) as t 
    where 日期 >='2019-06-08' 
    ) as u 
    UNPIVOT (数值 FOR 数据类型 in ([展现],[点击],[消费]) ) as UN

    .

     

     

  • 相关阅读:
    GIT更改clone方式 ;GIT的SSH配置
    关于web性能测试的一些总结
    pyinstaller 打包selenium程序后,消除chromdriver 控制台黑框
    pyinstaller 打包exe 遇到的坑
    jenkins 新增节点的3种方式
    class
    python 语法糖
    模块 subprocess
    模块 re
    模块 logging
  • 原文地址:https://www.cnblogs.com/qianslup/p/11001064.html
Copyright © 2011-2022 走看看