SQL实现group by 分组后组内排序】的更多相关文章

在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记录. 看起来不难的业务,做起来才知道还挺麻烦的,说白了其实就是实现分组后的组内排序,一般不思考的话我们会写出这样的语句: select top 2 English,Classid from CJ group by Classid order by English desc 出现这个错误,应该就明白了…
select name as 姓名,sum( case when cargo='笔' then 1 else 0 end ) as 笔,sum( case when cargo='橡皮' then 1 else 0 end ) as 橡皮from shopping group by name;…
转自:http://blog.163.com/jeson_lwj/blog/static/135761083201052411115783/ --查询每门课程的前2名成绩 CREATE TABLE StudentGrade( stuId CHAR(4), --学号 subId INT, --课程号 grade INT, --成绩 PRIMARY KEY (stuId,subId) ) GO --表中数据如下 INSERT INTO StudentGrade(stuId,subId,grade)…
原文:Sql示例说明如何分组后求中间值--[叶子] 这里所谓的分组后求中间值是个什么概念呢? 我举个例子来说明一下: 假设我们现在有下面这样一个表: type        name price ----------- ---- ------------ 2           A    5.4 2           A    3.7 2           B    4.3 1           B    4.7 2           B    6.7 2           B   …
一.排名 /*普通排名:从1开始,顺序往下排*/ AS rank ) r ORDER BY score; /*并列排名:相同的值是相同的排名*/ SELECT cs.* , CASE WHEN @p=score THEN @r END rank ,@p:=NULL)r ORDER BY score; /*并列排名:相同的值名次相同,与上例中的并列排名不同*/ SELECT city,score,rank FROM ( SELECT cs.*, @c:=IF(@p=score,@c,@r) AS…
group by 分组后 返回的是一个同属性的集合  我们可以遍历该集合…
一.排名 /*普通排名:从1开始,顺序往下排*/ AS rank ) r ORDER BY score; /*并列排名:相同的值是相同的排名*/ SELECT cs.* , CASE WHEN @p=score THEN @r END rank ,@p:=NULL)r ORDER BY score; /*并列排名:相同的值名次相同,与上例中的并列排名不同*/ SELECT city,score,rank FROM ( SELECT cs.*, @c:=IF(@p=score,@c,@r) AS…
比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select count(gid) from table group by gid是错误的 这样查询的是分组后 每个组内部的条数…
先来看看 linq的,下面的一段linq 是 ,在 学生导入数据的时候,我们根据学生的手机号码和学生名称进行分组,如果有重复的,我们就筛选出来,用到了 linq的 group by,注意这里是new出来 2个条件来进行分组,分别是telephone和studentname 这2个组成分组的条件,并且是判断分组后是否有重复 (count>1),如果有重复,就添加到 stugroup这个变量里面. 再最后,我们用 foreach进行循环输出 var studentQuery = from stu i…
当使用GROUP BY 分组,默认返回的数据是组中最小的记录即id最小的数据, 当开发中经常会需要分组后将最新的数据放在前面, 为了实现需求,使用了嵌套查询,分别使用order by来排序 SELECT id, from_id, to_id, conversation_id, created_date, has_read, content FROM ( SELECT * FROM message WHERE from_id = 6 OR to_id = 6 ORDER BY created_da…