mysql中sql_mode=only_full_group_by下的group by

背景:這是一個(gè)菜單表,類型有目錄、菜單、按鈕。
需求:根據(jù)類型分組查看組內(nèi)最大的id和菜單標(biāo)題。

數(shù)據(jù)示例.png

問(wèn)題:sql_mode=only_full_group_by按平常的寫法報(bào)錯(cuò)(如圖)。


報(bào)錯(cuò)圖.png

解決方案:
1.any_value包裹住沒(méi)有參與分組的字段。

SELECT max(id), type,any_value(title) FROM admin_menu GROUP BY type

查詢結(jié)果1.png

2.關(guān)聯(lián),先查詢出來(lái)重復(fù)類型中的最大id,再與自身關(guān)聯(lián)查詢出所要字段。

SELECT
 s2.id,s2.type,s2.title  from( SELECT type,max(id) as id FROM admin_menu GROUP BY type ) s1
 JOIN admin_menu s2 ON s2.id = s1.id;

查詢結(jié)果2.png

3.WITH AS,先分組查詢出來(lái)的結(jié)果作為臨時(shí)表再關(guān)聯(lián)原表查詢出來(lái)響應(yīng)信息。

WITH g_tt AS ( SELECT max(id), type FROM admin_menu GROUP BY type ) SELECT
s.id,s.type,s.title
FROM
 g_tt g
 JOIN admin_menu s ON s.id = g.id;

注:WITH AS的用法MySQL5.8才開(kāi)始支持,僅做示例。

總結(jié):
1.any_value包裹住沒(méi)有參與分組的字段。
2.關(guān)聯(lián),先查詢出來(lái)重復(fù)類型中的最大id,再與自身關(guān)聯(lián)查詢出所要字段。
3.WITH AS,先分組查詢出來(lái)的結(jié)果作為臨時(shí)表再關(guān)聯(lián)原表查詢出來(lái)響應(yīng)信息。

建表語(yǔ)句:

##建表語(yǔ)句
CREATE TABLE `admin_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `pid` bigint(20) DEFAULT NULL COMMENT '父菜單id',
  `type` varchar(1) DEFAULT NULL COMMENT '1目錄 2菜單 3按鈕',
  `title` varchar(255) DEFAULT NULL COMMENT '菜單標(biāo)題',
  `name` varchar(255) DEFAULT NULL COMMENT '組件名稱',
  `component` varchar(255) DEFAULT NULL COMMENT '組件',
  `sort` int(5) DEFAULT NULL COMMENT '排序',
  `path` varchar(255) DEFAULT NULL COMMENT '鏈接地址',
  `permission` varchar(255) DEFAULT NULL COMMENT '權(quán)限',
  `is_del` varchar(1) DEFAULT NULL COMMENT '刪除狀態(tài)',
  `created_date` datetime DEFAULT NULL,
  `created_by` varchar(255) DEFAULT NULL,
  `created_name` varchar(255) DEFAULT NULL,
  `updated_date` datetime DEFAULT NULL,
  `updated_by` varchar(255) DEFAULT NULL,
  `updated_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='菜單表_菜單相關(guān)數(shù)據(jù)';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容