欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql分組排序如何取第一條數(shù)據(jù)

 更新時間:2023年07月20日 17:01:39   作者:GoodStudyAndDayDayUp  
這篇文章主要介紹了mysql分組排序如何取第一條數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql分組排序取第一條數(shù)據(jù)

需求:

mysql 根據(jù)某一個字段分組,然后組內(nèi)排序,最后每組取排序后的第一條數(shù)據(jù)

1. 先使用(分組字段+排序字段)排序

相當(dāng)于實現(xiàn)了分組和排序,只是沒有根據(jù)分組字段聚合,此時每個分組的第一條數(shù)據(jù)就是我們需要的目標數(shù)據(jù)。

2. 再按分組字段分組,取第一條即可

實例如下:

with?
t_picture as(
?SELECT npi_product_id,is_default_one,update_time, uri FROM datahub_product_attachment where type=1 ORDER BY npi_product_id,is_default_one DESC,update_time DESC
)
SELECT npi_product_id, (ARRAY_AGG(uri))[1] as uri FROM t_picture ?group by npi_product_id

必須在分組前排序,分組后排序是對分組字段和聚合字段排序。

mysql分組求組內(nèi)的最大最小值

可能有一段時間沒寫代碼,今天在項目里發(fā)現(xiàn)了一個bug,記錄下~

(1)數(shù)據(jù)準備

《節(jié)假日表》
CREATE TABLE `app_calendar_holiday` (
  `holiday_name` varchar(50) NOT NULL COMMENT '假期名',
  `holiday_date` varchar(10) NOT NULL COMMENT '假期的日期(yyyy-MM-dd)',
  `rel_date` varchar(10) NOT NULL COMMENT '節(jié)假日相關(guān)聯(lián)的日子',
  `rel_date_status` int(1) NOT NULL COMMENT '節(jié)假日相關(guān)聯(lián)的日是否上班(	1:放假,2:上班)',
  `is_delete` int(1) NOT NULL DEFAULT '0' COMMENT '刪除flg',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  UNIQUE KEY `rel_date` (`rel_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='假期表';
-- ----------------------------
-- Records of app_calendar_holiday
-- ----------------------------
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-29', '2', '0', '2019-09-01 23:08:09', '2019-09-02 10:48:11');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-30', '1', '0', '2019-09-01 23:08:10', '2019-09-02 10:48:16');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-31', '1', '0', '2019-09-01 23:08:09', '2019-09-02 10:48:17');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2019-01-01', '1', '0', '2019-09-01 23:08:10', '2019-09-02 10:48:18');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-02', '2', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:22');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-03', '2', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:23');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-04', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:24');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-05', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:25');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-06', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:25');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-07', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:26');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-08', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:26');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-09', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:27');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-10', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:27');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-05', '1', '0', '2019-09-01 23:08:12', '2019-09-02 10:59:26');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-06', '1', '0', '2019-09-01 23:08:12', '2019-09-02 10:59:28');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-07', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:59:30');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-04-28', '2', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:31');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-05-01', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:48:45');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-05-02', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:48:46');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-05-03', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:47');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-05-04', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:47');
INSERT INTO `app_calendar_holiday` VALUES ('勞動節(jié)', '2019-05-01', '2019-05-05', '2', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:48');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-07', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:53');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-08', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:54');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-09', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:55');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-13', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:48:59');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-14', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:49:00');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-15', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:49:01');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-09-29', '2', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:04');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-01', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:05');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-02', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-03', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-04', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-05', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:07');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-06', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:08');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-07', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:10');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-12', '2', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:11');

(2)需求明確

查詢條件:某年某月 yyyy-MM

查詢結(jié)果:求出在該月里 的節(jié)假日

例子:條件為2019-09,返回中秋節(jié)的2019-09-13 ~ 2019-09-15 ,國慶節(jié)的放假日2019-10-1~2019-10-7 。

并輸出對應(yīng)的節(jié)假日日期、節(jié)假日名。

(3)錯誤log

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'panshi.t1.holiday_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

提示的 panshi.t1.holiday_name 無法取出。

(4)錯誤sql

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		MIN(t1.rel_date) AS minRelDate,
		MAX(t1.rel_date) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date;

(5)糾正后的SQL

糾正:select 的字段要是group by 所允許的?。?!追加分組的字段 t1.holiday_date

方法一:分組 + 每組里使用聚合函數(shù)

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		MIN(t1.rel_date) AS minRelDate,
		MAX(t1.rel_date) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date,
		t1.holiday_name;

方法二:分組 + 每組里日期排序,再取第一個

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		SUBSTRING_INDEX(
			GROUP_CONCAT(
				t1.rel_date
				ORDER BY
					t1.rel_date ASC
			),
			',',
			1
		) AS minRelDate,
		SUBSTRING_INDEX(
			GROUP_CONCAT(
				t1.rel_date
				ORDER BY
					t1.rel_date DESC
			),
			',',
			1
		) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date,
		t1.holiday_name;

結(jié)果:都是

在這里插入圖片描述

(6)拓展和總結(jié)

兩者方法都需要注意,如果SELECT ( 某些字段) FROM xxxx 。。。,SELECT 后的字段必須是group by 后面的,或者 使用聚合函數(shù)。

我出錯就在于,之前的sql 里 GROPY BY 只是寫了 節(jié)假日期,但又需要取出節(jié)假日名。

方法一:

注意,再mysql 里用到group_concat的時候,拼接后的字符串 是有長度限制的。默認是1024,可以通過修改mysql配置文件里的【group_concat_max_len】字段

其實 這種情況使用 group_concat + order by 的組合 ,有點多余的,因為已經(jīng)有聚合函數(shù)的出現(xiàn)。

不過想想,如果分組后 是組內(nèi) 需要按照某些字段排序的,返回 字符串類型的,可以用這個方法

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Windows下mysql 8.0.11 安裝教程

    Windows下mysql 8.0.11 安裝教程

    這篇文章主要為大家詳細介紹了Windows下mysql 8.0.11安裝教程 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • mysql5.7.23版本安裝教程及配置方法

    mysql5.7.23版本安裝教程及配置方法

    這篇文章主要介紹了mysql5.7.23版本安裝教程及配置方法,需要的朋友可以參考下
    2018-11-11
  • MySQL 導(dǎo)入慢的解決方法

    MySQL 導(dǎo)入慢的解決方法

    MySQL導(dǎo)出的SQL語句在導(dǎo)入時有可能會非常非常慢,在導(dǎo)出時合理使用幾個參數(shù),可以大大加快導(dǎo) 入的速度。
    2010-12-12
  • 當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引詳解

    當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引詳解

    這篇文章主要給大家介紹了關(guān)于當(dāng)Mysql行鎖遇到復(fù)合主鍵與多列索引的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MySQL關(guān)鍵字問題分析與解決方案

    MySQL關(guān)鍵字問題分析與解決方案

    在實際開發(fā)中,我們常常會遇到由于SQL語法錯誤導(dǎo)致的數(shù)據(jù)庫操作應(yīng)用不能正常運行的情況,其中,使用了MySQL關(guān)鍵字作為表名或字段名,而沒有邏輯地處理,帶來的問題最為常見,本文將從一個實際案例出發(fā),深入分析關(guān)鍵字問題及其解決方案,并提供進一步優(yōu)化與避免方案
    2024-12-12
  • MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)

    MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)

    本文主要介紹了MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn),詳細的介紹了為什么IN這么慢以及如何優(yōu)化,具有一定的參考價值,感興趣的可以了解一下
    2021-07-07
  • MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    在業(yè)務(wù)場景中經(jīng)常會用到like模糊查詢,但是大家都知道,like是用不到索引的,所以當(dāng)數(shù)據(jù)量非常大時,速度會非常慢,這篇文章主要給大家介紹了關(guān)于MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • 淺析MySQL數(shù)據(jù)的導(dǎo)出與導(dǎo)入知識點

    淺析MySQL數(shù)據(jù)的導(dǎo)出與導(dǎo)入知識點

    在本文里我們給大家分享了關(guān)于MySQL數(shù)據(jù)的導(dǎo)出與導(dǎo)入的相關(guān)實例和知識點內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • replace MYSQL字符替換函數(shù)sql語句分享(正則判斷)

    replace MYSQL字符替換函數(shù)sql語句分享(正則判斷)

    最近更新網(wǎng)站發(fā)現(xiàn)一些字段的值不是預(yù)期的效果,需要替換下值,通過下面的sql語句,直接執(zhí)行就可以了
    2012-06-06
  • Mysql慢查詢?nèi)罩疚募D(zhuǎn)Excel的方法

    Mysql慢查詢?nèi)罩疚募D(zhuǎn)Excel的方法

    面對公司生產(chǎn)環(huán)境中慢SQL問題的排查工作,由于日志文件格式混亂,相關(guān)資料無法提供便捷的格式化處理工具,故而自主編寫一套Java讀取慢SQL日志轉(zhuǎn)為Excel的小工具,該工具可以有效提升排查工作的效率,方便快捷地解決問題
    2024-10-10

最新評論