zoukankan      html  css  js  c++  java
  • 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;

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

  • 相关阅读:
    如何找出数组中重复次数最多的数
    如何计算两个有序整型数组的交集
    如何分别使用递归与非递归实现二分查找算法
    如何用递归算法判断一个数组是否是递增
    如何用一个for循环打印出一个二维数组
    如何用递归实现数组求和
    ElasticSearch安装和head插件安装
    SpringBoot全局异常处理方式
    Redis高级命令操作大全--推荐
    Mysql中FIND_IN_SET和REPLACE函数简介
  • 原文地址:https://www.cnblogs.com/thinksasa/p/2967175.html
Copyright © 2011-2022 走看看