日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql group by自定义_mysql – GROUP BY和自定义顺序

發布時間:2023/12/10 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql group by自定义_mysql – GROUP BY和自定义顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我已經閱讀了

MySQL order by before group by的答案,但是將它應用于我的查詢最后會在子查詢中找到一個子查詢,這是一個相當簡單的案例,所以我想知道這是否可以簡化:

帶有樣本數據的模式

為簡潔起見,我省略了成員表中的其他字段.此外,在實際應用程序中還有更多表加入,但這些表很容易加入.這是給我問題的membership_stack表.

CREATE TABLE members (

id int unsigned auto_increment,

first_name varchar(255) not null,

PRIMARY KEY(id)

);

INSERT INTO members (id, first_name)

VALUES (1, 'Tyler'),

(2, 'Marissa'),

(3, 'Alex'),

(4, 'Parker');

CREATE TABLE membership_stack (

id int unsigned auto_increment,

member_id int unsigned not null,

sequence int unsigned not null,

team varchar(255) not null,

`status` varchar(255) not null,

PRIMARY KEY(id),

FOREIGN KEY(member_id) REFERENCES members(id)

);

-- Algorithm to determine correct team:

-- 1. Only consider rows with the highest sequence number

-- 2. Order statuses and pick the first one found:

-- (active, completed, cancelled, abandoned)

INSERT INTO membership_stack (member_id, sequence, team, status)

VALUES (1, 1, 'instinct', 'active'),

(1, 1, 'valor', 'abandoned'),

(2, 1, 'valor', 'active'),

(2, 2, 'mystic', 'abandoned'),

(2, 2, 'valor', 'completed'),

(3, 1, 'instinct', 'completed'),

(3, 2, 'valor', 'active');

我無法更改數據庫架構,因為數據與外部數據源同步.

詢問

這是我到目前為止:

SELECT m.id, m.first_name, ms.sequence, ms.team, ms.status

FROM membership_stack AS ms

JOIN (

SELECT member_id, MAX(sequence) AS sequence

FROM membership_stack

GROUP BY member_id

) AS t1

ON ms.member_id = t1.member_id

AND ms.sequence = t1.sequence

RIGHT JOIN members AS m

ON ms.member_id = m.id

ORDER BY m.id, FIELD(ms.status, 'active', 'completed', 'cancelled', 'abandoned');

這可以按預期工作,但如果他們的“最近序列”涉及多個團隊,則成員可能會多次出現.我需要做的是再次在id上聚合并選擇每個組中的FIRST行.

然而,這會帶來一些問題:

>有no FIRST() function in MySQL

>這整個結果集將成為子表(子查詢),這在這里不是什么大問題,但查詢在應用程序上非常大.

>它需要與ONLY_FULL_GROUP_BY mode兼容,因為它在MySQL 5.7上默認啟用.我沒有檢查但是我懷疑FIELD(ms.status,’active’,’completed’,’cancel’,’abandoned’)被認為是這個結果集的功能依賴字段.該查詢還需要與MySQL 5.1兼容,因為這是我們目前正在運行的.

目標

| id | first_name | sequence | team | status |

|----|------------|----------|----------|-----------|

| 1 | Tyler | 1 | instinct | active |

| 2 | Marissa | 2 | valor | completed |

| 3 | Alex | 2 | valor | active |

| 4 | Parker | NULL | NULL | NULL |

我該怎么辦?

編輯:我注意到有些成員不屬于任何團隊.這些成員應包含在結果集中,并為這些字段使用空值.更新問題以反映新信息.

總結

以上是生活随笔為你收集整理的mysql group by自定义_mysql – GROUP BY和自定义顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。