MYSQL||报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated

碎碎念:

        兄弟萌,我胡汉三又回来啦(。・∀・)ノ゙嗨,最近在期末考,一不小心二十几天没发博了,年底KPI没冲成功,今天就来补一下下§(* ̄▽ ̄*)§

一、问题描述

        今天在牛客网做SQL的题:牛客的课程订单分析(五),具体内容感兴趣的小伙伴自行去搜一下,这里简述一下~~

        编码要求如下:

         我写的代码如下(真是老太婆的裹脚布,又臭又长,谁叫我是个菜鸟呢〒▽〒

WITH base_table AS (
    SELECT user_id,date,DENSE_RANK() over (partition by user_id order by date) AS rnk
    FROM order_info
    WHERE date>'2025-10-15'
    AND status='completed'
    AND product_name IN ('C++','Java','Python')
),
table1 AS (
    SELECT user_id, date as first_buy_date
    FROM base_table
    WHERE rnk=1
),
table2 AS (
    SELECT user_id, date as second_buy_date
    FROM base_table
    WHERE rnk=2
),
table3 AS (
    SELECT user_id, COUNT(user_id) AS cnt
    FROM base_table
)
SELECT base_table.user_id,first_buy_date,second_buy_date,cnt
FROM base_table,table1,table2,table3
WHERE base_table.user_id=table1.user_id
AND base_table.user_id=table2.user_id
AND base_table.user_id=table3.user_id

        然后点击自测运行,就光荣地报错了,好耶!内容为:SQL_ERROR_INFO: "In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'base_table.user_id'; this is incompatible with sql_mode=only_full_group_by" 


二、原因分析

        报错语句简单除暴地翻译过来就是: "在没有GROUP BY的聚合查询中,SELECT列表的表达式1包含非聚合的列'base_table.user_id';这与sql_mode=only_full_group_by不兼容"。

        那么我们就检查一下哪里的语句用到了'base_table.user_id',由代码可以看出,table1、table2、table3和最后的查询主体都出现了'base_table.user_id';

        报错语句提示,使用了聚合函数的地方没有用到group by语句,这不是在说table3嘛hhh,table3使用了count函数,却没有添加group by语句。


三、解决方案

        问题分析完自然就知道怎么解决啦~~在table3查询语句中添加GROUP BY语句即可!

         PS:网上有的解决方案是直接修改配置文件,使之与sql_mode=only_full_group_by兼容,也许这也是解决方法之一,但是我使用的是牛客网进行编程,我没法修改配置文件o( ̄┰ ̄*)ゞ还是乖乖地修改自己的代码好了

        本贴完,水贴+1   ο(=•ω<=)ρ⌒☆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值