最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL出現(xiàn)1055錯(cuò)誤:ONLY_FULL_GROUP_BY的問(wèn)題解決

 更新時(shí)間:2025年07月29日 08:21:04   作者:一勺菠蘿丶  
當(dāng)你執(zhí)行SQL查詢時(shí)突然遇到"1055 - Expression #1 of SELECT list is not in GROUP BY clause…"錯(cuò)誤,該怎么辦呢,下面小編就來(lái)和大家簡(jiǎn)單講講吧

當(dāng)你執(zhí)行SQL查詢時(shí)突然遇到"1055 - Expression #1 of SELECT list is not in GROUP BY clause…"錯(cuò)誤,是不是一臉懵?別擔(dān)心!這篇文章將用最簡(jiǎn)單的語(yǔ)言解釋這個(gè)MySQL 8.0常見(jiàn)錯(cuò)誤的原因和解決方案,即使你是SQL小白也能輕松搞定!

錯(cuò)誤重現(xiàn):典型的報(bào)錯(cuò)場(chǎng)景

SELECT
  product_id,
  product_name,
  pic,
  sp_data,
  SUM(quantity) AS total_sales
FROM order_items
GROUP BY sku_id;  -- 這里只按sku_id分組

錯(cuò)誤信息:

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ry-mall.item.product_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

一、錯(cuò)誤原因解析(小學(xué)生也能懂!)

想象你有一盒彩色鉛筆(數(shù)據(jù)庫(kù)表),里面有:

  • 鉛筆型號(hào)(sku_id)
  • 鉛筆顏色(product_name)
  • 生產(chǎn)批次(product_id)
  • 鉛筆圖片(pic)

現(xiàn)在老板要求:“按鉛筆型號(hào)分組,統(tǒng)計(jì)每種型號(hào)的總數(shù)量,同時(shí)顯示顏色、批次和圖片”

問(wèn)題來(lái)了:

  • 同一型號(hào)可能有不同顏色(比如型號(hào)A001有紅色和藍(lán)色)
  • 分組后,MySQL不知道該顯示紅色還是藍(lán)色
  • 這就是 ONLY_FULL_GROUP_BY 模式的作用 - 防止數(shù)據(jù)混亂!

核心原因:SELECT中的列(如product_name)沒(méi)有出現(xiàn)在GROUP BY中,MySQL無(wú)法確定取哪個(gè)值

二、3種解決方案(附詳細(xì)示例)

方案1:完善GROUP BY子句(推薦??????????)

SELECT
  product_id,
  product_name,
  pic,
  sp_data,
  SUM(quantity) AS total_sales
FROM order_items
GROUP BY 
  sku_id,          -- 原始分組列
  product_id,      -- 新增
  product_name,    -- 新增
  pic,             -- 新增
  sp_data          -- 新增

優(yōu)點(diǎn):

  • 完全符合SQL標(biāo)準(zhǔn)
  • 數(shù)據(jù)100%準(zhǔn)確
  • 適合所有MySQL版本

缺點(diǎn):

GROUP BY列表較長(zhǎng)

方案2:使用聚合函數(shù)(高效方案????????)

SELECT
  MAX(product_id) AS product_id,      -- 使用MAX取值
  MAX(product_name) AS product_name,  -- 使用MAX取值
  MAX(pic) AS pic,
  MAX(sp_data) AS sp_data,
  SUM(quantity) AS total_sales
FROM order_items
GROUP BY sku_id  -- 只需分組一列

適用場(chǎng)景:

  • 當(dāng)同一sku_id對(duì)應(yīng)的其他列值相同時(shí)
  • 需要優(yōu)化查詢性能時(shí)

重要提示:

  • 如果同一sku_id有不同顏色,MAX()會(huì)取字母排序最后的顏色(如"藍(lán)色">“紅色”)
  • 使用前需確認(rèn)業(yè)務(wù)邏輯是否允許

方案3:臨時(shí)關(guān)閉嚴(yán)格模式(應(yīng)急方案??)

-- 第一步:查看當(dāng)前模式
SELECT @@sql_mode;

-- 第二步:移除ONLY_FULL_GROUP_BY
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- 第三步:執(zhí)行原SQL
SELECT ... (原始問(wèn)題語(yǔ)句)

強(qiáng)烈不推薦:

  • 可能導(dǎo)致數(shù)據(jù)隨機(jī)顯示
  • 每次重連數(shù)據(jù)庫(kù)都要重新設(shè)置
  • 生產(chǎn)環(huán)境絕對(duì)禁止!

三、原問(wèn)題SQL修復(fù)完整版

SELECT
  item.product_id,
  item.product_name,
  item.pic,
  item.sp_data,
  SUM(item.quantity) AS total_sales  -- 去掉IFNULL更簡(jiǎn)潔
FROM oms_order_item item
INNER JOIN oms_order o ON o.id = item.order_id  -- 改用INNER JOIN
WHERE o.STATUS IN (1, 2, 3)
  AND item.create_time >= '2025-07-28 00:00:00'
  AND item.create_time < '2025-07-29 00:00:00'
GROUP BY 
  item.sku_id,
  item.product_id,     -- 關(guān)鍵修復(fù)!
  item.product_name,   -- 關(guān)鍵修復(fù)!
  item.pic,            -- 關(guān)鍵修復(fù)!
  item.sp_data         -- 關(guān)鍵修復(fù)!
ORDER BY total_sales DESC
LIMIT 10;

四、預(yù)防措施 & 最佳實(shí)踐

1.設(shè)計(jì)表結(jié)構(gòu)時(shí):

-- 確保sku_id能唯一確定商品信息
ALTER TABLE products ADD UNIQUE (sku_id);

2.永久修改sql_mode(慎重!):

-- 編輯MySQL配置文件 my.cnf:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

3.開(kāi)發(fā)規(guī)范:

所有SELECT的非聚合列必須出現(xiàn)在GROUP BY中

使用別名時(shí)特別注意:

SELECT 
  product_id AS id,  -- 別名
  ...
GROUP BY product_id  -- 必須用原始列名!

總結(jié):選擇哪種方案?

情況推薦方案原因
生產(chǎn)環(huán)境方案1(完善GROUP BY)數(shù)據(jù)絕對(duì)安全
測(cè)試環(huán)境方案2(使用MAX)執(zhí)行更快
緊急調(diào)試方案3(關(guān)閉嚴(yán)格模式)快速驗(yàn)證

記住這個(gè)黃金法則:GROUP BY中的列,應(yīng)該能唯一確定SELECT中的其他列。遵循這個(gè)原則,你將永遠(yuǎn)告別1055錯(cuò)誤!

到此這篇關(guān)于MySQL出現(xiàn)1055錯(cuò)誤:ONLY_FULL_GROUP_BY的問(wèn)題解決的文章就介紹到這了,更多相關(guān)MySQL 1055錯(cuò)誤解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談MySql的存儲(chǔ)引擎(表類(lèi)型)

    淺談MySql的存儲(chǔ)引擎(表類(lèi)型)

    通常意義上,數(shù)據(jù)庫(kù)也就是數(shù)據(jù)的集合,具體到計(jì)算機(jī)上數(shù)據(jù)庫(kù)可以是存儲(chǔ)器上一些文件的集合或者一些內(nèi)存數(shù)據(jù)的集合
    2011-05-05
  • MySQL參數(shù)優(yōu)化信息參考(my.cnf參數(shù)優(yōu)化)

    MySQL參數(shù)優(yōu)化信息參考(my.cnf參數(shù)優(yōu)化)

    下面針對(duì)一些參數(shù)進(jìn)行說(shuō)明,當(dāng)然還有其它的設(shè)置可以起作用,取決于你的負(fù)載或硬件:在慢內(nèi)存和快磁盤(pán)、高并發(fā)和寫(xiě)密集型負(fù)載情況下,你將需要特殊的調(diào)整
    2024-07-07
  • mysql事件的開(kāi)啟和調(diào)用

    mysql事件的開(kāi)啟和調(diào)用

    這篇文章主要介紹了mysql事件的開(kāi)啟和調(diào)用,需要的朋友可以參考下
    2015-01-01
  • 簡(jiǎn)單聊一聊SQL中的union和union?all

    簡(jiǎn)單聊一聊SQL中的union和union?all

    在寫(xiě)SQL的時(shí)候,偶爾會(huì)用到兩個(gè)表的數(shù)據(jù)結(jié)合在一起返回的,就需要用到UNION 和 UNION ALL,這篇文章主要給大家介紹了關(guān)于SQL中union和union?all的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • mysql中insert與select的嵌套使用解決組合字段插入問(wèn)題

    mysql中insert與select的嵌套使用解決組合字段插入問(wèn)題

    本節(jié)主要介紹了mysql中insert與select的嵌套使用解決組合字段插入問(wèn)題,需要的朋友可以參考下
    2014-07-07
  • 安裝MySQL常見(jiàn)的三種方式

    安裝MySQL常見(jiàn)的三種方式

    MySQL是一個(gè)開(kāi)放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。接下來(lái)通過(guò)本篇文章給大家分享安裝MySQL常見(jiàn)的三種方式,需要的朋友可以參考下
    2015-09-09
  • mysql between實(shí)現(xiàn)選取介于兩個(gè)值之間的數(shù)據(jù)范圍

    mysql between實(shí)現(xiàn)選取介于兩個(gè)值之間的數(shù)據(jù)范圍

    這篇文章主要介紹了mysql between實(shí)現(xiàn)選取介于兩個(gè)值之間的數(shù)據(jù)范圍,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySQL中的悲觀鎖與樂(lè)觀鎖

    MySQL中的悲觀鎖與樂(lè)觀鎖

    這篇文章主要介紹了MySQL中悲觀鎖與樂(lè)觀鎖的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-09-09
  • 你的like語(yǔ)句為什么沒(méi)索引詳解

    你的like語(yǔ)句為什么沒(méi)索引詳解

    這篇文章主要給大家介紹了關(guān)于你的like語(yǔ)句為什么沒(méi)索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Window Docker 安裝MySQL8.0的過(guò)程詳解

    Window Docker 安裝MySQL8.0的過(guò)程詳解

    本文給大家介紹在Windows環(huán)境下安裝Docker并配置MySQL容器的全流程介紹,過(guò)程中還涉及到文件映射和客戶端連接MySQL的操作,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評(píng)論

多伦县| 海口市| 宣武区| 秦皇岛市| 宜君县| 呼图壁县| 都江堰市| 宕昌县| 城口县| 隆德县| 盘锦市| 通城县| 堆龙德庆县| 安仁县| 称多县| 建宁县| 昭平县| 福鼎市| 彰武县| 阳曲县| 介休市| 拜城县| 长乐市| 乌海市| 阿拉尔市| 广水市| 通榆县| 武邑县| 离岛区| 深圳市| 莆田市| 通道| 连州市| 连平县| 建平县| 天柱县| 安丘市| 洛南县| 清涧县| 和静县| 苏尼特右旗|