IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL xin手错误鉴赏 -> 正文阅读

[大数据]SQL xin手错误鉴赏

1. 第一段代码

2. 第二段代码

2.1 题目地址:SQL82 牛客的课程订单分析(六)

# 写出一个sql语句查询在2025-10-15以后,
# 同一个用户下单2个以及2个以上状态为购买成功的
# C++课程或Java课程或Python课程的订单id,是否拼团以及客户端名字信息,
# 最后一列如果是非拼团订单,则显示对应客户端名字,
# 如果是拼团订单,则显示NULL,并且按照order_info的id升序排序

# order_info
# client

SELECT t.id, 
       t.is_group_buy,
       IF(t.is_group_buy = 'Yes', NULL, t.name) AS client_name
FROM (SELECT *,
             COUNT(*) OVER(PARTITION BY user_id) AS cnt  
      FROM   order_info o
      LEFT JOIN   client c
             ON o.client_id = c.id 
      WHERE  date > '2025-10-15'
             AND status = 'completed'
             AND product_name IN ('C++', 'Java', 'Python')
      ) AS t
WHERE t.cnt >= 2
ORDER BY t.id

2.2 报错


Execution Error

SQL_ERROR_INFO: "Duplicate column name 'id'"

2.3 解释

报错原因是参与子查询中参与JOIN的两个表存在相同名称的字段且并非连接字段,即下图的id
在这里插入图片描述

2.4 解决

表格中有相同字段对的情况下,在select 字段的时候需要在其前面指定表格名。比如 SELECT xxx改为SELECT a.xxx

# 写出一个sql语句查询在2025-10-15以后,
# 同一个用户下单2个以及2个以上状态为购买成功的
# C++课程或Java课程或Python课程的订单id,是否拼团以及客户端名字信息,
# 最后一列如果是非拼团订单,则显示对应客户端名字,
# 如果是拼团订单,则显示NULL,并且按照order_info的id升序排序

# order_info
# client


SELECT t.id, 
       t.is_group_buy,
       IF(t.is_group_buy = 'Yes', NULL, t.name) AS client_name
FROM (SELECT o.*, c.name,   # 这里并非全选使用 *,而是指定表格o,为了排除表格c中重复的字段id(也可以选择在外表使用JOIN)
             COUNT(*) OVER(PARTITION BY user_id) AS cnt  
      FROM   order_info o
      LEFT JOIN   client c   # 这里不能使用 INNER JOIN
             ON o.client_id = c.id 
      WHERE  date > '2025-10-15'
             AND status = 'completed'
             AND product_name IN ('C++', 'Java', 'Python')
      ) AS t
WHERE t.cnt >= 2
ORDER BY t.id

2.5 反思

其实这里问题的根源是我将JOIN放在了FROM后面的子查询中,而子查询的SELECT中使用了全选*,这是一条新手经验:使用了JOIN,就要注意对重复字段进行指定表格,包括*

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:41:02  更:2022-02-01 20:41:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:28:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码