mysql下分组取关联表指定提示方法,类似于mssql中的cross apply

转至:https://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results

通过分组的排序及序号获取条数信息,可以使用到索引,没测试性能,不知道和mssql的cross apply性能差异性为多少,只是能实现相应的效果。

 1 #MySQL 5.7.12
 2 #please drop objects you‘ve created at the end of the script
 3 #or check for their existance before creating
 4 #‘\\‘ is a delimiter
 5
 6
 7 CREATE TABLE test
 8     (`Person` varchar(5), `Group` int, `Age` int)
 9 ;
10
11 INSERT INTO test
12     (`Person`, `Group`, `Age`)
13 VALUES
14     (‘Bob‘, 1, 32),
15     (‘Jill‘, 1, 34),
16     (‘Shawn‘, 1, 42),
17     (‘Jake‘, 2, 29),
18     (‘Paul‘, 2, 36),
19     (‘Laura‘, 2, 39)
20 ;
21
22 select person, `group`, age
23 from
24 (
25    select person, `group`, age,
26       (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number
27   from test t
28   CROSS JOIN (select @num:=0, @group:=null) c
29   order by `Group`, Age desc, person
30 ) as x
31 where x.row_number <= 2;
32
33
34 drop table test
时间: 2024-11-03 20:49:40

mysql下分组取关联表指定提示方法,类似于mssql中的cross apply的相关文章

Mysql 数据分组取某字段值所有最大的记录行

需求: 表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前.这是典型的排名表 +------+-------+--------------+---------------------+ | uid | level | role | time | +------+-------+--------------+---------------------+ | 7 | 1 | 摇滚圣魔 | 2014-06-12 15:01:0

MySQL查询-分组取组中某字段最大(小)值所有记录

最近做东西的时候,用到一个数据库的查询.将记录按某个字段分组,取每个分组中某个字段的最大值的所有记录.举栗子来说. 已知分数表“score”,包含字段“id", "name", "course", "score".包含记录如下图所示. 现在,要求查询每个人分数最高的课程的那一条记录.即获得如下结果: 大概思路是,先通过order by将记录按score字段排序,创建临时表.然后按name字段分组查询临时表,即可获得所需查询结果.完整的s

MySQL下创建序列及创建自定义函数方法介绍

工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MySQL中寻找替代SEQUENCE的解决方案. 在DB2中创建一个SEQUENCE的方法如下: DROP SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO; CREATE SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO AS BIGINT INCRE

linux下命令取IP地址的多种方法

经常会遇到在命令行取ip地址,或写脚本引用ip地址,需要使用命令取出来:下面的方法根据实际情况调整 下面的命令环境为centos6.6系统: [[email protected] ~]# ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 00:0C:29:2A:03:61             inet addr:192.168.20.50  Bcast:192.168.20.255  Mask:255.255.255.0         

MySQL高级分组排序

想要根据用户分组,以该用户的下单时间为降序,提取所有用户的第二个订单信息.这属于分组排序,在Oracle有内置函数可以实现,而在mysql就有点麻烦: CREATE TABLE user_orders (orders_id INT UNSIGNED NOT NULL, user_id INT UNSIGNED NOT NULL, add_time INT UNSIGNED NOT NULL, PRIMARY KEY(orders_id), KEY(user_id), KEY(add_time)

django中外键关联表的查询随笔

django中,如果一个数据库中的表之间有外键的话可以方便的通过一个表查询到其相关表的数据.如有下面三个model:class Blog(models.Model):    name = models.CharField(max_length=100)    tagline = models.TextField() def __unicode__(self):        return self.name class Author(models.Model):    name = models

mysql实现分组排序

群里有童鞋问,想要根据用户分组,以该用户的下单时间为降序,提取所有用户的第二个订单信息. 这属于分组排序,在Oracle有内置函数可以实现,而在mysql,做起来比较蛋疼. 我提供一种方法供参考 CREATE TABLE user_orders (orders_id INT UNSIGNED NOT NULL, user_id INT UNSIGNED NOT NULL, add_time INT UNSIGNED NOT NULL, PRIMARY KEY(orders_id), KEY(us

【数据库】主键,外键,主表,从表,关联表,父表,子表

转自:https://www.2cto.com/database/201707/662425.html 一.前言 在数据库设计中,hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的. 二.概述 下面从数据库设计角度,ORM框架使用(以Hibernate为例),PowerDesigner软件以及实际业务角度进行一下介绍. (1) 数据库角度而言 主键:一般情况下

关联表映射 Association Table Mapping

把关联保存为一个表,存储关联表的外键 在对象中,使用集合作为域值,来处理多值域. 而在DB中,只能有单值域. 外键映射的核心,是在关联关系的单值端使用外键来维持联系. 而在多对多的关联关系中,已经不存在单值端了. 运行机制 使用一个链接表来保存关联关系. 仅有两个字段,即两个关联表的外键ID. 对于每一对相关联的对象,它会有一个数据行与之对应. 链接表没有对应的内存对象.所以也就没有ID.其主键是两个关联表的主键的组合. 从链接表中加载Data需要两次查询,例如为雇员加载机能的问题 1,查询Em