sql分组

SQL分组统计

♀尐吖头ヾ 提交于 2019-12-17 01:34:55
第一种情况:横向显示 先看下面的一个数据表: 现在的需求是:统计出v_coun每一种取值情况下,对就的V_iseneded的数量。 Oracle中的 SQL代码如下: select v_count,sum(case when v_isended=1 then 1 else 0 end) as 一的数量, sum(case when v_isended=0 then 1 else 0 end) as 零的数量 from t_vote group by v_count 结果如下: 第二种情况:竖向显示 表结构如下: 对应的列名意思为:员工工号、员工姓名、计件工资。上面只是一部分数据,总共的数据有七百多条 现在的需求是:对这些员工的计件工资进行分段统计,结果如下图: Oracle中SQL代码如下所示: select "分段统计(元)", count("分段统计(元)") as "本月(人)" from (select (case when pay_marketcount < 100 then cast('100以下' as varchar(10)) else(case when pay_marketcount <= 500 then cast('100-500' as varchar(10)) else (case when pay_marketcount <= 1000 then

关于MYSQL group by 分组按时间取最大值的实现方法!

隐身守侯 提交于 2019-12-16 20:12:13
类如 有一个帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示, 现在要求 选出 前十个来自不同主题的最新回复 SELECT * FROM posts GROUP BY tid LIMIT 10 这样一个sql语句选出来的并非你想要的 最新的回复,而是最早的回复,实际上是某篇主题的第一条回复记录! 也就是说 GROUP BY 语句没有排序,那么怎么才能让 GROUP 按照 dateline 倒序排列呢?加上 order by 子句? 看下面: SELECT * FROM posts GROUP BY tid ORDER BY dateline DESC LIMIT 10 这条语句选出来的结果和上面的完全一样,不过把结果倒序排列 了,而选择出来的每一条记录仍然是上面的记录,原因是 group by 会比 order by 先执行,这样也就没有办法将 group by 之前,也就是在分组之前进行排序了, 有网友会写出下面的sql 语句: SELECT * FROM posts GROUP BY tid DESC ORDER BY

复杂sql分组查询 ( pivot)

爱⌒轻易说出口 提交于 2019-12-16 19:33:49
一个数据表里面字段有年、月、日、金额、支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额。如下图: 原sql查询出来的结果是这样的: ------------------------------------------------------------------------------------------- 然后想实现的sql结果最后呈现是这样的: 这可为难了我了,简单的增删改查左右链接sql语句我还会写,这个稍微复杂一点我就不知道如何下手了。该怎么分组,然后把行增加为列呢? 去找度娘搜的时候,都不知道怎么描述自己的想搜的关键字。最后找了一位sql高手同学帮忙解决了这个问题, 人家只是一句简单的sql语句就把我的需求给实现了,实在是让我佩服!这个pivot关键是什么东东,我还第一次看见,从来没用过,这么强大! sql语句: SELECT Year,Months,tDays,[711], [BankIn],[iTunesHK] , [711]+[BankIn]+[iTunesHK] as total FROM ( select * from #temp) AS t PIVOT (SUM(amount) FOR [PayType] IN ( [711], [BankIn],

MySql之增删改查 · YbWork\'s Studio

冷暖自知 提交于 2019-12-16 01:08:40
前提 :在进行“增删改查”的操作之前,先建立一个包含数据表student的数据库(具体操作可以见 MySQL之最基本命令 ): 1、“增”——添加数据 1.1 为表中所有字段添加数据 1.1.1 INSERT 语句中指定所有字段名 语法:INSERT INTO 表名(字段名1,字段名2,…)        VALUES(值1,值2,…); 举例:INSERT INTO student(id,name,grade)    VALUES(1,’zhangshan’,98); 使用SELECT * FROM student;命令查看结果为: 表示数据已经成功插入。 1.1.2 INSERT语句中不指定字段名 若不指定字段名,则添加的值的顺序应和字段在表中的顺序完全一致。 语法:INSERT INTO 表名 VALUES(值11,值2,…); 举例:INSERT INTO student    VALUES (2,’lisi’,62); 使用SELECT * FROM student;命令查看结果为: 1.2 为表的指定字段添加数据 为指定字段添加数据,即只向部分字段添加值,而其他字段的值为表定义时的默认值。 语法:INSERT INTO 表名(字段1,字段2,…)    VALUES(值1,值2,…) 举例:INSERT INTO student(id,name)    VALUES(3

聚合查询,group by,where,having

筅森魡賤 提交于 2019-12-15 16:14:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。 简单说来: where子句: select sum(num) as rmb from order where id>10//只有先查询出id大于10的记录才能进行聚合语句 having子句: select reportsto as manager, count(*) as reports from employees group by reportsto having count(*) > 4 以northwind库为例.having条件表达示为聚合语句。肯定的说having子句查询过程执行优先级别低于聚合语句。 再换句说话说把上面的having换成where则会出错。统计分组数据时用到聚合语句。 对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。 having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。 聚合函数,这是必需先讲的一种特殊的函数: 例如SUM, COUNT, MAX, AVG等

LINQ分组查询统计

久未见 提交于 2019-12-15 11:35:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> LINQ分组查询统计 这里介绍Linq使用Group By和Count得到每个CategoryID中产品的数量,Linq使用Group By和Count得到每个CategoryID中断货产品的数量等方面。 学经常会遇到Linq使用Group By问题,这里将介绍Linq使用Group By问题的解决方法。 1.计数 var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, NumProducts = g.Count() }; 语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。 说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。 2.带条件计数 var q = from p in db.Products group p by p.CategoryID into g select new { g.Key, NumProducts = g.Count(p = > p.Discontinued) }; 语句描述:Linq使用Group By和Count得到每个CategoryID中断货产品的数量。 说明:先按CategoryID归类

mySQL数据库(二)

我只是一个虾纸丫 提交于 2019-12-14 05:45:41
1.DQL:查询语句(重点掌握) 1.1 排序查询 语法 SELECT 字段名 FROM 表名 [ WHERE 条件 ] ORDER BY 字段名 [ ASC | DESC ] ; ASC: 升序,默认值 DESC: 降序 注意 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 例子 查询所有数据,使用年龄降序排序 select * from student order by age desc ; 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序 select * from student order by age desc , math asc ; 补充案例 计算math 和 english总成绩 并按照总成绩降序排序 SELECT NAME , math + IFNULL ( english , 0 ) score FROM stu ORDER BY score DESC ; order by 总结 order by 子句后可以支持那些内容? 表中的字段 函数 order by 执行顺序? 最后再执行 除了limit语句 1.2 聚合函数 什么是sql函数 当我们学习编程语言的时候,经常会遇到函数。函数的好处是,它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了编写代码的效率,又提高了可维护性

mysql数据库

青春壹個敷衍的年華 提交于 2019-12-13 01:13:40
MySQL 数据库的相关概念 一、数据库的好处 1、可以持久化数据到本地 2、结构化查询 二、数据库的常见概念 1、DB:数据库,存储数据的容器 2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB 3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言 三、数据库存储数据的特点 1、数据存放到表中,然后表再放到库中 2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己 3、表中有一个或多个列,列又称为“字段”,相当于java中“属性” 4、表中的每一行数据,相当于java中“对象” 四、常见的数据库管理系统 mysql、oracle、db2、sqlserver DQL语言 DQL(Data Query Language) 数据查询语言 基础查询 一、语法 select 查询列表 from 表名; 二、特点 查询列表可以是字段、常量、表达式、函数,也可以是多个 查询结果是一个虚拟表 三、示例 1、查询单个字段 select 字段名 from 表名; 2、查询多个字段 select 字段名,字段名 from 表名; 3、查询所有字段 select * from 表名 4、查询常量 select 常量值; 注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要 5、查询函数 select

[读书笔记] SQL必知必会

爷,独闯天下 提交于 2019-12-12 07:26:05
SQL必知必会 文章目录 SQL必知必会 检索相关注意点 检索去重数据关键字——DISTINCT 检索从第N行开始检索前M行数据 三种注释方式 排序相关注意点 排序方向 过滤数据 WHERE子句操作符 组合WHERE子句 AND、OR逻辑操作符 IN操作符 NOT操作符 用通配符进行过滤 百分号通配符(%) 下划线(_)通配符 方括号([ ])通配符 计算字段 拼接字段 算术运算 使用函数 文本处理函数 数值处理函数 聚集函数 聚集不同值 组合聚集函数 数据分组 过滤分组 分组和排序 子查询 作为计算阻断使用字符串 联结 使用表别名 不同类型的联结 使用带聚集函数的联结 组合查询 UNION关键字 数据插入 事物处理 游标 索引 检索相关注意点 检索去重数据关键字——DISTINCT DISTINCT关键字指示数据库只返回不同值,若使用DISTINCT关键字,必须放在列名前面。DISTINCT关键字作用于所有列。 SELECT DISTINCT * FROM TABLE ; 检索从第N行开始检索前M行数据 SQL SERVER: SELECT TOP 5 column FROM table ; ORACLE: SELECT cloumn FROM table WHERE ROWNUM <= 5 ; MySQL,MariaDB,PostgreSQL或者SQLite: SELECT

mysql group by 对多个字段进行分组

江枫思渺然 提交于 2019-12-11 02:56:43
在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下: Table: Subject_Selection Subject Semester Attendee --------------------------------- ITB001 1 John ITB001 1 Bob ITB001 1 Mickey ITB001 2 Jenny ITB001 2 James MKB114 1 John MKB114 1 Erica 我们想统计每门课程有多少个学生报名,应用如下SQL: SELECT Subject, Count(*) FROM Subject_Selection GROUP BY Subject 得到如下结果: Subject Count ------------------------------ ITB001 5 MKB114 2 因为表里记录了有5个学生选择ITB001,2个学生选择了MKB114。 产生这个结果的原因是: GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里。 那么GROUP BY X, Y呢? GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。 我们下面再接着要求统计出每门学科每个学期有多少人选择