• SQL语句解析


    1.group by用法
      只有在分组统计中才会使用group by ,这个分组统计有两个涵义:第一必须是分组,不以组归类就无所谓group by,group by的意思就是以组为单位。第二,必须是计算,而且必须是按组计算。

    计算每个班级多少人:
    select class,count(*) from students group by class;按班级计算,每个班级有多少人。(正确)
    select class,grade from students group by class;(错)没有统计计算

    举例:
    有这样一个表
    id 科目 姓名 分数
    1 英语 王生 98
    2 语文 张生 83
    3 数学 王生 91
    4 英语 张生 95
    5 化学 李生 85
    ...

    1. 只能用一句sql语句,查询到科目成绩总和最高的那位学生
    2. 只能用一句sql语句,查询到各科成绩都大于90的那个学生

    答案:
    1. select top 1 姓名,sum(分数) as 分数总和 from 表名 group by 姓名
    order by 分数总和 desc
    2. select 姓名 from 表名 group by 姓名 having min(分数)>90

    2.having用法

    having 条件表达式 :筛选成组后的各种数据(区别:where子句在聚合前先筛选记录,)也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。(是先group by后的视图,然后从该视图中对having条件进行筛选);

    例子:先用where pv>1筛选,然后用group by frp分组查询得到pvtotal,最后根据分组后得到的sql视图用having pvtotal>1筛选结果。

    SELECT sum(pv) as pvtotal,frp FROM `tj_pt_src_day` where pv>1 group by frp having pvtotal>1

    HAVING不能用于应被用于WHERE子句的条目。 例如,不能编写如下语句:
    mysql> SELECT col_name FROM tbl_name HAVING col_name > 0;
    而应这么编写:
    mysql> SELECT col_name FROM tbl_name WHERE col_name > 0;

    3.复合主键:primary key(key1,key2,...)

    create table timestamp (id int(11) auto_increment,name varchar(20),intime int(10),primary key(id,intime)) default character set utf8 collate utf8_general_ci;

    注意:这不是一个表里有多个主键,而是复合主键,由多个字段组合在一起作为主键,设置复合主键的原因是当一个列不足以用来表示一条记录的唯一性的时候,就需要设置多个列为复合主键,来标识一条记录的唯一性。

  • 相关阅读:
    微信小程序、支付宝小程序、H5根据字符串生成相同的二维码
    大文件排序优化实践
    Nginx(五):http反向代理的实现
    Nginx(四):http服务器静态文件查找的实现
    关于大数据技术的一点思考
    Nginx(三):http模块的处理流程解析之正向代理
    基于Prometheus网关的监控完整实现参考
    谈谈mysql和oracle的使用感受 -- 差异
    Nginx(二): worker 进程处理流程框架解析
    退避算法实现之:客户端优雅回调
  • 原文地址:https://www.cnblogs.com/thinksasa/p/2967175.html
Copyright © 2020-2023  润新知