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 的后面,结果将所有分组都拿了出来,但是聚合函数没有计数。

  • 相关阅读:
    微信小程序 页面跳转navigator与传递参数
    微信小程序 wxml中的属性记录
    iOS 集成极光推送
    ios 后台发送邮件之SKPSMTPMessage的使用
    git 配置忽略文件(忽略UserInterfaceState.xcuserstate,Breakpoints_v2.xcbkptlist)
    iOS 定位功能的实现
    ios 关于状态栏的一些小知识
    ios label上显示特殊字符 % "
    ios 按钮点击无反应
    ios 正则表达式之验证手机号、邮箱、身份证、银行卡
  • 原文地址:https://www.cnblogs.com/grady1028/p/10660677.html
Copyright © 2011-2022 走看看