当前位置: 首页 > news >正文

SQL GROUPING运算符详解

在大数据开发中,我们经常需要对数据进行分组和汇总分析。

image.png

目录

    • 1. GROUPING运算符概念
    • 2. 语法和用法
    • 3. 实际应用示例
    • 4. GROUPING运算符的优势
    • 5. 高级应用场景
      • 5.1 与CASE语句结合使用
      • 5.2 多维数据分析
    • 6. 性能考虑和优化技巧
    • 7. GROUPING运算符的局限性
    • 8. 最佳实践
    • 9. GROUPING与其他高级SQL功能的结合
      • 9.1 GROUPING与窗口函数
      • 9.2 GROUPING与递归CTE
    • 10. 实际应用案例分析
      • 10.1 电子商务销售分析
      • 10.2 性能优化实践
    • 结论

SQL提供了强大的GROUP BY子句来实现这一功能,而GROUPING运算符则是GROUP BY的一个重要补充。

本文将详细介绍GROUPING运算符的概念、用法以及实际应用场景。

1. GROUPING运算符概念

GROUPING运算符是用于区分普通分组行和超级聚合行(super-aggregate rows)的一个函数。它通常与ROLLUP、CUBE或GROUPING SETS子句一起使用,这些子句会生成额外的汇总行。

GROUPING运算符的作用是:

  • 当应用于一个列时,如果该行是由于该列而产生的分组操作,则返回0。
  • 如果该行是一个超级聚合行(即不是由该列产生的分组),则返回1。

这个特性使得我们能够轻松区分不同级别的汇总数据,从而进行更复杂的数据分析。

2. 语法和用法

GROUPING运算符的基本语法如下:

SELECT column1, column2, GROUPING(column1) AS group_indicator,aggregate_function(column3)
FROM table_name
GROUP BY ROLLUP(column1, column2);

在这个例子中:

  • GROUPING(column1) 将返回0或1,表示该行是否是column1的分组结果。
  • ROLLUP(column1, column2) 会生成多级汇总,包括(column1, column2)、(column1)和总计行。

3. 实际应用示例

让我们通过一个具体的例子来说明GROUPING运算符的使用。

假设我们有一个销售数据表sales,包含以下字段:年份(year)、季度(quarter)、产品(product)和销售额(amount)。

CREATE TABLE sales (year INT,quarter INT,product VARCHAR(50),amount DECIMAL(10, 2)
);INSERT INTO sales VALUES
(2023, 1, 'ProductA', 1000),
(2023, 1, 'ProductB', 1500),
(2023, 2, 'ProductA', 1200),
(2023, 2, 'ProductB', 1800),
(2024, 1, 'ProductA', 1100),
(2024, 1, 'ProductB', 1600);

现在,我们想要得到按年份和季度的销售总额,同时包括年度总计和全部总计。我们可以使用GROUPING运算符来区分不同级别的汇总:

SELECT year,quarter,SUM(amount) AS total_sales,GROUPING(year) AS year_grouping,GROUPING(quarter) AS quarter_grouping
FROM sales
GROUP BY ROLLUP(year, quarter)
ORDER BY year, quarter;

这个查询的结果可能如下:

year   | quarter | total_sales | year_grouping | quarter_grouping
-------|---------|-------------|---------------|------------------
2023   | 1       | 2500.00     | 0             | 0
2023   | 2       | 3000.00     | 0             | 0
2023   | NULL    | 5500.00     | 0             | 1
2024   | 1       | 2700.00     | 0             | 0
2024   | NULL    | 2700.00     | 0             | 1
NULL   | NULL    | 8200.00     | 1             | 1

在这个结果中:

  • year_grouping为0,quarter_grouping为0的行表示具体的年份和季度数据。
  • year_grouping为0,quarter_grouping为1的行表示年度总计。
  • year_grouping为1,quarter_grouping为1的行表示全部总计。

4. GROUPING运算符的优势

image.png

  1. 数据区分: 通过GROUPING运算符,我们可以轻松区分普通分组数据和不同级别的汇总数据。

  2. 灵活的报表生成: 结合CASE语句,我们可以为不同级别的汇总添加描述性标签,使报表更易读。

  3. 性能优化: 相比于使用UNION ALL来生成多个级别的汇总,使用GROUPING SETS或ROLLUP配合GROUPING运算符通常能获得更好的性能。

  4. 复杂分析支持: 在数据仓库和OLAP应用中,GROUPING运算符为复杂的多维分析提供了强大支持。

5. 高级应用场景

image.png

5.1 与CASE语句结合使用

GROUPING运算符经常与CASE语句结合使用,以创建更具可读性的报表。例如:

SELECT CASE WHEN GROUPING(year) = 1 THEN 'All Years'ELSE CAST(year AS VARCHAR)END AS year,CASE WHEN GROUPING(quarter) = 1 THEN 'All Quarters'ELSE CAST(quarter AS VARCHAR)END AS quarter,SUM(amount) AS total_sales
FROM sales
GROUP BY ROLLUP(year, quarter)
ORDER BY year, quarter;

这个查询会将NULL值替换为更有意义的标签,使报表更易于理解。

image.png

5.2 多维数据分析

在数据仓库环境中,GROUPING运算符可以用于复杂的多维数据分析。例如,我们可以同时按年份、季度和产品进行分组:

SELECT CASE WHEN GROUPING(year) = 1 THEN 'All Years' ELSE CAST(year AS VARCHAR) END AS year,CASE WHEN GROUPING(quarter) = 1 THEN 'All Quarters' ELSE CAST(quarter AS VARCHAR) END AS quarter,CASE WHEN GROUPING(product) = 1 THEN 'All Products' ELSE product END AS product,SUM(amount) AS total_sales,GROUPING(year) + GROUPING(quarter) + GROUPING(product) AS grouping_level
FROM sales
GROUP BY CUBE(year, quarter, product)
ORDER BY grouping_level, year, quarter, product;

image.png

这个查询使用CUBE而不是ROLLUP,它会生成所有可能的组合。grouping_level列显示了汇总的层级,0表示最详细的级别,3表示总计。

6. 性能考虑和优化技巧

image.png

虽然GROUPING运算符功能强大,但在处理大量数据时也需要注意性能问题。以下是一些优化建议:

  1. 索引优化:确保在用于分组的列上建立适当的索引。

  2. 分区表:对于大型表,考虑使用分区来提高查询性能。

  3. 物化视图:对于经常运行的复杂分组查询,可以考虑创建物化视图。

  4. 并行查询:在支持的数据库系统中,利用并行查询功能来加速大规模数据的分组操作。

7. GROUPING运算符的局限性

尽管GROUPING运算符非常有用,但也存在一些局限性:

  1. 可读性:复杂的GROUPING查询可能难以阅读和维护。

  2. 特定语法:不同的数据库系统可能有略微不同的语法实现。

  3. 性能开销:在某些情况下,使用GROUPING可能导致额外的性能开销。

8. 最佳实践

image.png

  1. 适度使用:不要过度使用GROUPING和复杂的ROLLUP/CUBE操作,以免影响查询的可读性和性能。

  2. 文档化:对于复杂的GROUPING查询,提供清晰的注释和文档。

  3. 测试:在大数据集上充分测试GROUPING查询的性能。

  4. 替代方案:考虑是否可以使用其他方法(如多个简单查询加UNION ALL)来实现相同的结果。

GROUPING运算符是SQL中进行高级数据分析和报表生成的强大工具。通过本文的深入探讨,我们不仅了解了它的基本用法,还探索了高级应用场景、性能优化技巧以及最佳实践。

在大数据开发中,熟练运用GROUPING运算符可以大大提高数据分析的效率和灵活性。

然而,也要注意在实际应用中权衡其优缺点,选择最适合特定场景的解决方案。

9. GROUPING与其他高级SQL功能的结合

GROUPING运算符的强大之处不仅在于它本身,还在于它能与其他高级SQL功能结合使用,从而实现更复杂的数据分析任务。

9.1 GROUPING与窗口函数

窗口函数是另一个强大的SQL分析工具。当与GROUPING结合使用时,我们可以在不同的聚合级别上执行窗口计算。例如:

WITH grouped_sales AS (SELECT CASE WHEN GROUPING(year) = 1 THEN 'All Years' ELSE CAST(year AS VARCHAR) END AS year,CASE WHEN GROUPING(quarter) = 1 THEN 'All Quarters' ELSE CAST(quarter AS VARCHAR) END AS quarter,SUM(amount) AS total_sales,GROUPING(year) + GROUPING(quarter) AS grouping_levelFROM salesGROUP BY ROLLUP(year, quarter)
)
SELECT *,SUM(total_sales) OVER (ORDER BY grouping_level, year, quarter) AS cumulative_sales,total_sales / SUM(total_sales) OVER () * 100 AS percentage_of_total
FROM grouped_sales
ORDER BY grouping_level, year, quarter;

这个查询不仅使用了GROUPING来创建多级汇总,还使用窗口函数计算了累计销售额和总销售额的百分比。

9.2 GROUPING与递归CTE

在某些复杂的分析场景中,我们可能需要将GROUPING与递归公共表表达式(Recursive CTE)结合使用。例如,假设我们有一个包含产品层次结构的表:

CREATE TABLE product_hierarchy (product_id INT PRIMARY KEY,product_name VARCHAR(50),parent_id INT
);INSERT INTO product_hierarchy VALUES
(1, 'Electronics', NULL),
(2, 'Computers', 1),
(3, 'Laptops', 2),
(4, 'Desktops', 2),
(5, 'Smartphones', 1);-- 假设sales表新增了product_id列
ALTER TABLE sales ADD COLUMN product_id INT;
-- 更新sales表的数据
UPDATE sales SET product_id = CASE WHEN product = 'ProductA' THEN 3  -- LaptopsWHEN product = 'ProductB' THEN 5  -- SmartphonesEND;

现在,我们可以使用递归CTE和GROUPING来创建一个包含层次结构的销售报表:

WITH RECURSIVE product_tree AS (SELECT product_id, product_name, parent_id, 0 AS levelFROM product_hierarchyWHERE parent_id IS NULLUNION ALLSELECT c.product_id, c.product_name, c.parent_id, p.level + 1FROM product_hierarchy cJOIN product_tree p ON c.parent_id = p.product_id
),
sales_with_hierarchy AS (SELECT pt.product_id,pt.product_name,pt.level,s.year,SUM(s.amount) AS total_salesFROM sales sJOIN product_tree pt ON s.product_id = pt.product_idGROUP BY ROLLUP(pt.product_id, pt.product_name, pt.level, s.year)
)
SELECT CASE WHEN GROUPING(product_id) = 1 THEN 'All Products' ELSE product_name END AS product,CASE WHEN GROUPING(year) = 1 THEN 'All Years' ELSE CAST(year AS VARCHAR) END AS year,total_sales,GROUPING(product_id) AS product_grouping,GROUPING(year) AS year_grouping,level
FROM sales_with_hierarchy
ORDER BY level, product_grouping, year_grouping, product, year;

这个复杂的查询结合了递归CTE、GROUPING和ROLLUP,生成了一个包含产品层次结构的多级销售报表。

10. 实际应用案例分析

10.1 电子商务销售分析

假设我们是一个大型电子商务平台的数据分析师,需要生成一个综合销售报表。这个报表需要按照不同的维度(年份、季度、产品类别、销售渠道)进行多级汇总。

首先,让我们创建一个更复杂的销售数据表:

CREATE TABLE ecommerce_sales (sale_id INT PRIMARY KEY,year INT,quarter INT,product_category VARCHAR(50),channel VARCHAR(20),amount DECIMAL(10, 2)
);INSERT INTO ecommerce_sales VALUES
(1, 2023, 1, 'Electronics', 'Online', 1000),
(2, 2023, 1, 'Electronics', 'In-store', 800),
(3, 2023, 1, 'Clothing', 'Online', 500),
(4, 2023, 2, 'Electronics', 'Online', 1200),
(5, 2023, 2, 'Clothing', 'In-store', 600),
(6, 2024, 1, 'Electronics', 'Online', 1100),
(7, 2024, 1, 'Clothing', 'Online', 700);

现在,我们可以使用GROUPING运算符来创建一个全面的销售分析报表:

SELECT CASE WHEN GROUPING(year) = 1 THEN 'All Years'ELSE CAST(year AS VARCHAR)END AS year,CASE WHEN GROUPING(quarter) = 1 THEN 'All Quarters'ELSE CAST(quarter AS VARCHAR)END AS quarter,CASE WHEN GROUPING(product_category) = 1 THEN 'All Categories'ELSE product_categoryEND AS category,CASE WHEN GROUPING(channel) = 1 THEN 'All Channels'ELSE channelEND AS channel,SUM(amount) AS total_sales,COUNT(*) AS transaction_count,AVG(amount) AS avg_transaction_value,GROUPING(year) + GROUPING(quarter) + GROUPING(product_category) + GROUPING(channel) AS grouping_level
FROM ecommerce_sales
GROUP BY CUBE(year, quarter, product_category, channel)
ORDER BY grouping_level, year, quarter, product_category, channel;

这个查询提供了一个全面的销售概览,包括:

  • 总销售额
  • 交易次数
  • 平均交易值
  • 按年、季度、产品类别和销售渠道的各种组合的汇总

通过这个报表,我们可以快速识别销售趋势,比较不同产品类别和销售渠道的表现,并进行时间序列分析。

10.2 性能优化实践

在处理大规模数据时,上述查询可能会面临性能挑战。以下是一些优化建议:

  1. 索引优化:在year、quarter、product_category和channel列上创建适当的索引。

  2. 分区表:如果数据量非常大,可以考虑按年份或季度对表进行分区。

  3. 物化视图:对于经常运行的复杂GROUPING查询,可以创建物化视图:

CREATE MATERIALIZED VIEW sales_summary AS
SELECT year,quarter,product_category,channel,SUM(amount) AS total_sales,COUNT(*) AS transaction_count,AVG(amount) AS avg_transaction_value
FROM ecommerce_sales
GROUP BY CUBE(year, quarter, product_category, channel);
  1. 并行查询:在支持的数据库系统中,确保复杂的GROUPING查询能够利用并行执行计划。

结论

通过这篇深入的技术博客,我们不仅探讨了SQL GROUPING运算符的基本概念和用法,还深入研究了它与其他高级SQL功能的结合应用,以及在实际业务场景中的应用和优化策略。

GROUPING运算符作为一个强大的数据分析工具,能够帮助数据分析师和开发者更高效地处理多维数据聚合和报表生成任务。

然而,需要注意的是,随着查询复杂度的增加,可能会对性能产生影响。因此,在实际应用中,需要权衡查询的复杂性和性能需求,选择最适合特定场景的解决方案。通过合理使用索引、分区、物化视图等优化技术,我们可以在保证查询灵活性的同时,也能获得良好的性能表现。

希望这篇全面的技术博客能为您在大数据开发和数据分析工作中提供有价值的参考和指导。无论是日常的报表生成还是复杂的数据挖掘任务,掌握GROUPING运算符及其相关技术都将大大提升您的数据处理能力。

相关文章:

SQL GROUPING运算符详解

在大数据开发中,我们经常需要对数据进行分组和汇总分析。 目录 1. GROUPING运算符概念2. 语法和用法3. 实际应用示例4. GROUPING运算符的优势5. 高级应用场景5.1 与CASE语句结合使用5.2 多维数据分析 6. 性能考虑和优化技巧7. GROUPING运算符的局限性8. 最佳实践9. GROUPING与其…...

在VS2017下FFmpeg+SDL编写最简单的视频播放器

1.下载ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令 5.复制一下mp4视频到工程Debug目录下(复制一份到*.vcxproj同一目录,用于调试) 6…...

LogViewer v2.x更新

logvewer 介绍 logviewer 是一个可以方便开发人员通过浏览器查看和下载远程服务器集群日志,使用ssh方式管理远程tomcat、jar包等应用,节省服务器资源。大家可以下载体验,请勿用于生产环境。欢迎提出意见或建议。 解决的问题 一般情况下公司…...

detection_segmentation

目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类: R-CNN生成…...

0基础学python-13:古希腊掌管时间的模块——datetime和time

目录 前言 datetime模块 一、datetime 类 1.创建 datetime 对象 2.获取日期时间的各个部分 3.格式化日期时间为字符串 4.解析字符串为 datetime 对象 二、timedelta 类 1.创建 timedelta 对象 datetime注意事项 time模块 1.获取当前时间戳 2.获取当前时间的结构化表…...

棒球特长生升学具有其独特的优势和劣势·棒球6号位

棒球特长生升学具有其独特的优势和劣势,以下是对这两方面的详细分析: 获得更好的教育资源: 棒球特长生有机会通过棒球特长招生计划进入更好的学校。这些学校往往拥有更优质的教育资源,包括师资力量、教学设施、课程设置等&#…...

搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示

Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示...

数据分析案例-2024 年热门动漫数据集可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)

方案一:移除类库这些失效的引用,下载对应版本的dll(如有则不需要重复下载),重新添加引用 方案二:类库右键属性-调整目标框架版本(一般是降低版本) 方案三:调整类库编译顺…...

STM32智能无人机控制系统教程

目录 引言环境准备智能无人机控制系统基础代码实现:实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:无人机管理与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…...

从 QWebEnginePage 打印文档

QWebEnginePage 是 Qt WebEngine 模块中的一个类,它提供了用于处理网页内容的接口。如果你想要打印 QWebEnginePage 中的内容,你可以使用 QPrinter 和 QPrintDialog 类来实现。 项目配置了 Qt WebEngine 模块,并且在你的.pro文件中包含了相应…...

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…...

【学术会议征稿】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)

2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024) 2024 3rd International Conference on Informatics,Networking and Computing (ICINC 2024) 2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024)将于2024年10月25-27日于中国郑州召…...

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…...

策略模式原理与C++实现

定义 定义一些列算法,把他们一个个封装起来,并且使他们可以相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展、子类化)。 C实现 在不考虑策略模式的情况…...

打包一个自己的Vivado IP核

写在前面 模块复用是逻辑设计人员必须掌握的一个基本功,通过将成熟模块打包成IP核,可实现重复利用,避免重复造轮子,大幅提高我们的开发效率。 接下来将之前设计的串口接收模块和串口发送模块打包成IP核,再分别调用…...

《昇思25天学习打卡营第05天|qingyun201003》

日期 心得 通过本节课的学习,学习到了通过网络获取数据集,处理数据集模型。数据模型层数据变换,模型参数解析和其对应代码中的API进行解析。 昇思MindSpore 基础入门学习 网络构建 (AI 代码解析) 网络构建 神经网络模型是由神经网络层和T…...

【Leetcode】二十一、前缀树 + 词典中最长的单词

文章目录 1、背景2、前缀树Trie3、leetcode208:实现Trie4、leetcode720:词典中最长的单词 1、背景 如上,以浏览器搜索时的自动匹配为例: 如果把所有搜索关键字放一个数组里,则:插入、搜索一个词条时&#x…...

秋招Java后端开发冲刺——Mybatis使用总结

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目,它封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO(Plain …...

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高,文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件,使其既能保持清晰,又能轻松分享?今天,给大家分享五种实用的视频压缩方法,快来…...

【Oracle】Oracle语法之递归查询

目录 递归查询使用场景备注 语法相关属性解释 案例基本使用升级版-带上递归查询的属性 总结: 递归查询 Oracle的递归查询是指在一个查询语句中使用自引用的方式进行循环迭代查询。它可以用于处理具有层次结构的数据,如组织架构、产品类别等。递归查询通…...

【教程】Vue2中使用svg矢量图

1.npm导包 npm i svg-sprite-loader --save2.创建目录放入svg文件,创建SvgIcon.js 3.SvgIcon.js const req require.context(./svg, false, /\.svg$/) const requireAll requireContext > requireContext.keys().map(requireContext) requireAll(req)4.vue.c…...

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…...

PDF 转图片并插入到 EXCEL 再转PDF

pom.xml 引用 <dependency><groupId>com.aspose</groupId><artifactId>aspose-cells</artifactId><version>21.11</version></dependency><dependency><groupId>com.aspose</groupId><artifactId>as…...

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接&#xff1a; https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化&#xff1f;_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示&#xff0c;需要对请求参数 autor 和phone进行随机参数化 2、目前有…...

24/7/12总结

axios Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 get请求: <script>function…...

sentinel网关限流配置及使用

sentinel控制台源码&#xff1a;https://download.csdn.net/download/yixin605691235/89543923 sentinel控制台jar包&#xff1a;https://download.csdn.net/download/yixin605691235/89543931 不同环境直接修改jar包中的application.yml文件中的nacos地址就可以了。 一、网关限…...

# 如何解决 App Store 审核中的 4.3(a) 问题:Guideline 4.3(a) - Design - Spam

如何解决 App Store 审核中的 4.3(a) 问题&#xff1a;Guideline 4.3(a) - Design - Spam 4.3(a) 审核问题是指&#xff1a;你的应用与其他开发者提交的应用在二进制文件、元数据和/或概念上存在相似之处&#xff0c;仅有微小差别。这通常会导致你的应用被视为垃圾应用而被拒绝…...

最长上升子序列(LIS)

最长上升子序列(最长递增子序列,LIS) 给定长度为 n n n的序列 v v v&#xff0c;求此序列中严格递增(上升)的子序列长度最大值(子序列可由原序列中不连续的元素构成) 朴素DP( O ( n 2 ) O(n^2) O(n2)) 闫氏DP分析法 状态表示&#xff1a; 集合 d p dp dp&#xff1a;所有满足…...

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…...