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   ο(=•ω<=)ρ⌒☆

猜你喜欢

转载自blog.csdn.net/Inochigohan/article/details/122380585