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

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

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

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

錯誤重現(xiàn):典型的報錯場景

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

錯誤信息:

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

一、錯誤原因解析(小學(xué)生也能懂?。?/h2>

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

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

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

問題來了:

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

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

二、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)點:

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

缺點:

GROUP BY列表較長

方案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  -- 只需分組一列

適用場景:

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

重要提示:

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

方案3:臨時關(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 ... (原始問題語句)

強(qiáng)烈不推薦:

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

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

SELECT
  item.product_id,
  item.product_name,
  item.pic,
  item.sp_data,
  SUM(item.quantity) AS total_sales  -- 去掉IFNULL更簡潔
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ù)防措施 & 最佳實踐

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

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

2.永久修改sql_mode(慎重?。?/strong>

-- 編輯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.開發(fā)規(guī)范:

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

使用別名時特別注意:

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

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

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

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

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

相關(guān)文章

  • 淺談MySql的存儲引擎(表類型)

    淺談MySql的存儲引擎(表類型)

    通常意義上,數(shù)據(jù)庫也就是數(shù)據(jù)的集合,具體到計算機(jī)上數(shù)據(jù)庫可以是存儲器上一些文件的集合或者一些內(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)化)

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

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

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

    簡單聊一聊SQL中的union和union?all

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

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

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

    安裝MySQL常見的三種方式

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

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

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

    MySQL中的悲觀鎖與樂觀鎖

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

    你的like語句為什么沒索引詳解

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

    Window Docker 安裝MySQL8.0的過程詳解

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

最新評論

宜昌市| 营山县| 宝鸡市| 巴楚县| 上杭县| 周口市| 山阳县| 铜川市| 衢州市| 新宁县| 阿图什市| 仲巴县| 延川县| 盘山县| 大同县| 齐齐哈尔市| 汶上县| 徐州市| 塔河县| 娄烦县| 高邮市| 敦化市| 普洱| 桐柏县| 富顺县| 茶陵县| 巩义市| 镇远县| 玉林市| 抚顺市| 大冶市| 枣阳市| 环江| 手游| 临清市| 临颍县| 麻江县| 色达县| 珲春市| 右玉县| 兴业县|