zoukankan      html  css  js  c++  java
  • Sql 复习(3)

    COUNT(*)返回所有行数,包括值为NULL的行数。

    COUNT(address)返回address不为NULL的行数。

    AVG,SUM,MAX,MIN都会忽略值为NULL的行。

    MIN如果对非数值数据操作。将返回该列排序最前面的行。

    MAX如果对非数值数据操作。将返回该列排序最后面的行。

    ALL和DISTINCT

    ALL是聚合函数的默认行为,如果不指定DISTINCT,则默认为对所有行执行计算。

    SELECT COUNT(ALL address) FROM Users 等价于 SELECT COUNT(address) FROM Users

    SELECT SUM(DISTINCT price) FROM Products

    DISTINCT可以用于MIN或者MAX,但是这样做没有意义。

    因为不管取最大值还是最小值都和数据是否重复无关。

    DISTINCT后面必须有列名,所以COUNT(DISTINCT *)是不合法的。

    GROUP BY

    如果分组列中包含NULL的值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

    GROUP BY 子句中列出的必须是列或者有效的表达式(聚合函数除外)。不能使用别名

    SQLSERVER不支持按列的相对位置分组。

    GROUP BY ALL--这是个有意思的功能,看下面的例子:

    CREATE TABLE T_DEMO
    (
    [D_NAME] CHAR(10) NOT NULL PRIMARY KEY,
    [D_ADDRESS] NVARCHAR(MAX) NULL
    )
    GO
    --加三个没有地址的数据
    INSERT INTO T_DEMO(D_NAME)
    VALUES('AAA'),('CCC'),('DDD')
    GO
    --加两个地址相同,一个地址不同的数据
    INSERT INTO T_DEMO(D_NAME,D_ADDRESS)
    VALUES('BBB','Software Square A'),
    ('EEE','Software Square A'),
    ('FFF','Software Square B')
    GO
     
    SELECT D_ADDRESS FROM T_DEMO GROUP BY D_ADDRESS

    可以看到NULL作为一组被分了出来。

    SELECT D_ADDRESS,COUNT(D_ADDRESS) AS ADDRESS_COUNT FROM T_DEMO GROUP BY D_ADDRESS

    可以看到NULL这个组COUNT聚合函数不去计算它。

    SELECT D_ADDRESS,COUNT(D_ADDRESS) AS ADDRESS_COUNT FROM T_DEMO
    WHERE D_ADDRESS='Software Square A'
    GROUP BY D_ADDRESS

    加了一个WHERE语句,这个结果没什么好说的。注意下面:

    SELECT D_ADDRESS,COUNT(D_ADDRESS) AS ADDRESS_COUNT FROM T_DEMO
    WHERE D_ADDRESS='Software Square A'
    GROUP BY ALL D_ADDRESS

    加了一个ALL关键字在GROUP BY 的后面,结果将所有分组都拿了出来,但是聚合函数没有计数。

  • 相关阅读:
    C++ crash 堆栈信息获取(三篇文章)
    qt捕获全局windows消息(使用QAbstractNativeEventFilter,然后注册这个类)
    qt之fillder抓包(QT网络版有一些具体的坑)
    qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)
    模块化开发AraeRegistration
    CLR的组成和运转
    开源框架Caliburn.Micro
    URL
    负载均衡架构
    C add
  • 原文地址:https://www.cnblogs.com/grady1028/p/10660677.html
Copyright © 2011-2022 走看看