`
jedy
  • 浏览: 147730 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

取分组中的特定记录

阅读更多
表test有三列(a,b,c),100万条记录。(a,b)上有唯一索引,现在要查找对于每一个a,b的值最大的那条记录。有好几种方法。

1. select * from (select * from test order by d desc) as t group by a;
速度最快的,但只有MySQL可以用。

2. select t1.* from test t1 left join test t2 on t1.a = t2.a and t1.b < t2.b where t2.b is null; 因为用了联接,查询的行数比较多,所以比较慢。a的选择率越低,速度越慢。

3. select * from test where (a,b) in (select a,max(b) from test group by a); 这个慢不是因为表扫描,而是因为对于test的每一行,select a,max(b) from test group by a都会做一遍,这个从profile的结果可以看出来,explain中select_type是DEPENDENT SUBQUERY应该是同样的意思。
所以先建一个临时表可以提高速度,
select t1.* from test t1 , (select a,max(b) as b from test group by a) as t2 where t1.a = t2.a and t1.b = t2.b
这种方法,a的选择性越高则越慢

4. select * from test t1 where not exists (select * from test t2 where t1.a = t2.a and t1.b < t2.b)
和2差不多
分享到:
评论

相关推荐

    MongoDB聚合分组取第一条记录的案例与实现方法

    总的来说,这个案例展示了如何在MongoDB中处理复杂的数据操作,包括数据分组、排序和选择特定记录。理解并熟练运用MongoDB的聚合框架是优化数据处理的关键,特别是在实时分析和大数据场景下。在面对类似的需求时,应...

    MySql实现分组取n条最大记录.txt

    在MySQL中实现分组并获取每组中的特定数量的最大记录是一项常见的需求,尤其是在处理大量数据时。例如,在上述示例中,我们希望基于`resid`进行分组,并且对于每个组,我们要找出前两条具有最高`pscore`和次高的`...

    分组并排序取前N

    标题“分组并排序取前N”涉及到数据库查询中的一个重要概念,这通常指的是在SQL查询中使用`GROUP BY`、`ORDER BY`以及`LIMIT`子句来对数据进行分组、排序,并提取出每组中排名靠前的N条记录。在数据库管理中,这种...

    Python视频教程之pandas groupby 分组取每组的前几行记录方法.pdf

    总结一下,pandas的`groupby`和`head`方法结合使用,可以有效地从分组数据中提取特定记录。这对于数据探索、统计分析或者报告生成等任务非常有用。理解并熟练掌握这个技巧,能显著提高Python数据处理的效率,对于...

    Python视频教程之pandas groupby 分组取每组的前几行记录方法.docx

    在实际工作中,我们经常需要对数据进行分组操作,并从每个组中提取特定的记录,例如每组的前几行。`groupby`函数是pandas中实现这一功能的关键,它可以将数据按照指定的列进行分组,而`head()`则用于获取每组的前...

    Mysql取分组后的每组第一条数据

    总之,获取分组后每组的特定记录通常需要利用临时表或者窗口函数等技术,这要求对SQL有深入的理解,并能根据具体数据库版本和数据特性选择合适的方法。在实际应用中,应始终考虑性能和效率,以适应不断变化的大数据...

    Hive中分组取topN_row_number-rank和dense_rank的使用.pdf

    在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...

    SQL语句分组获取记录的第一条数据的方法

    总结来说,通过使用SQL的窗口函数`ROW_NUMBER()`以及`OVER()`子句,我们可以轻松地在分组数据中获取第一条或特定位置的记录。这对于数据挖掘、报表设计和业务洞察具有重要的价值。在实际工作中,理解并灵活运用这些...

    Python在groupby分组后提取指定位置记录方法

    Python的pandas库中的groupby()函数是进行数据分组的核心工具,它允许我们将数据按照某一或某些列进行聚合,以实现对特定组内的统计分析。本文将深入探讨如何在groupby分组后提取指定位置的记录,这对于精细化的数据...

    如何制作排名前N名的分组报表

    最后,**取其前N**,即筛选出每个组别中的前N个记录,通常是最高或最低的N个。在数据查询界面,针对“Grouping Columns”的列设置“TopN”选项。点击“Grouping Options”,在弹出的界面中,你可以设置前N或后N的...

    Oracle多行记录合并

    在实际应用中,选择哪种方法取决于具体的需求、数据结构以及Oracle数据库的版本。例如,如果只需要简单的字符串连接,`LISTAGG`通常是首选;如果需要处理复杂的数据关系,可能需要借助`CONNECT BY`或`MODEL`。在使用...

    在窗口显示所有记录.rar

    5. **搜索和过滤功能**:为了帮助用户快速找到特定记录,窗口通常会提供搜索框,允许用户输入关键词进行全文搜索,或者提供过滤器根据指定条件筛选记录。 6. **排序和分组**:用户可能需要按特定字段对记录进行升序...

    SQL语句删除数据表中重复的记录

    在SQL中,可以使用特定的查询语句来删除重复的记录,以保持数据的整洁和准确。以下是如何使用SQL语句来删除数据表中重复记录的详细步骤。 首先,我们来看一个简单的例子,假设我们有一个名为`Repeat`的数据表,其中...

    gridcontrol实现分组,并实现分组总计,平均统计

    在GridControl中,我们可以设置列的分组规则,根据特定字段对数据行进行自动分组。 接着,我们来看看如何在GridControl中实现分组。这通常涉及到以下步骤: 1. **配置GridControl**:首先,确保你已经在设计界面...

    如何查出同一张表中字段值重复的记录

    GROUP BY 语句可以用来分组数据,并且通过 COUNT 函数计算每个分组中的记录数量。如果某个分组的记录数量大于 1,则表示存在重复记录。例如: ```sql SELECT COUNT(num), MAX(name) FROM student GROUP BY num ...

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    在MySQL数据库中,有时我们需要对数据进行分组并获取每组中的特定记录,例如每组的前几条或最大/最小值所在的记录。这通常涉及到`GROUP BY`和`ORDER BY`子句的使用。本篇文章将深入探讨这两种SQL语句,并提供多种...

    小学科学六年级分组实验记录(上学期).doc

    在六年级的科学课程中,学生通过分组实验的方式深入理解和应用科学原理。以下是对所给文件中几个实验的详细解读: 1. **选择什么工具实验** 这个实验的目的是让学生了解不同工具的功能和使用场合。在实验过程中,...

    Oracle中用Rowid查找和删除表中的重复记录

    此方法通过子查询找到每个重复记录组中的最大Rowid,从而获取到每组重复记录中的一个。 #### 删除重复记录 针对不同的场景,可以采取以下几种策略来删除重复记录: 1. **基于Group By和Min/Max Rowid** ```sql ...

Global site tag (gtag.js) - Google Analytics