我有一個帶有重復 Id 的表和一個代表別名“players_level”的 JSON 資料,我正在嘗試對 Id 進行分組,所以我沒有重復的 Id,但問題是在對 Id 進行分組時我無法得到具有更大“players_level”別名的行,例如我有這個資料:
| ID | 分數 | 球員 | 玩家等級 |
|---|---|---|---|
| 1 | 0 | {} | 0 |
| 16 | 1000 | {“1”:{“222”:[],“1232”:[],“2824”:[],“33332”:[],“66345”:[]}} | 2 |
| 17 | 0 | {“1”:{}} | 1 |
| 16 | 500 | {“1”:{“2824”:[“148500”]},“48”:{“2890”:[]}} | 3 |
我正在嘗試像這樣對資料進行分組:
| ID | 分數 | 球員 | 玩家等級 |
|---|---|---|---|
| 1 | 0 | {} | 0 |
| 17 | 0 | {“1”:{}} | 1 |
| 16 | 500 | {“1”:{“2824”:[“148500”]},“48”:{“2890”:[]}} | 3 |
如您所見,第 2 行消失了,因為它的 player_level 為 2,而第四行的級別為 3...但是當嘗試使用 SQL 的多種技術(Group By、Order By、Max...)進行分組時,我無法獲得輸出的右行:(
有人可以幫我嗎?我有一個資料示例的小提琴鏈接:
https ://www.db-fiddle.com/f/sfQVa722kfkNw2JyRdQJZr/0
uj5u.com熱心網友回復:
您可以HAVING與子選擇一起使用MAX
架構(MySQL v5.7)
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
CREATE TABLE IF NOT EXISTS `test` (
`id` int(6) unsigned NOT NULL,
`score` int(6) unsigned NOT NULL,
`players` varchar(200) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `score`, `players`) VALUES
('1', 0, '{}'),
('16', 1000, '{"1": {"222": [], "1232": [], "2824": [], "33332": [], "66345": []}}'),
('17', 0, '{"1": {}}'),
('16', 500, '{"1": {"2824": ["148500"]}, "48": {"2890": []}}')
查詢 #1
SELECT t.id, t.score, t.players,
(CASE
WHEN (JSON_CONTAINS(JSON_EXTRACT(t.players, '$."1"."2824"'), '148500') = 1 OR JSON_CONTAINS(JSON_EXTRACT(t.players, '$."1"."2824"'), '"148500"') = 1) THEN 3
WHEN JSON_CONTAINS(JSON_KEYS(JSON_EXTRACT(t.players, '$."1"')), '"2824"') = 1 THEN 2
WHEN JSON_CONTAINS(JSON_KEYS(t.players), '"1"') = 1 THEN 1
ELSE 0
END) players_level
from test t
HAVING (id,players_level) IN (SELECT t.id,
MAX(CASE
WHEN (JSON_CONTAINS(JSON_EXTRACT(t.players, '$."1"."2824"'), '148500') = 1 OR JSON_CONTAINS(JSON_EXTRACT(t.players, '$."1"."2824"'), '"148500"') = 1) THEN 3
WHEN JSON_CONTAINS(JSON_KEYS(JSON_EXTRACT(t.players, '$."1"')), '"2824"') = 1 THEN 2
WHEN JSON_CONTAINS(JSON_KEYS(t.players), '"1"') = 1 THEN 1
ELSE 0
END) players_level
from test t
GROUP BY t.id);
| ID | 分數 | 球員 | 玩家等級 |
|---|---|---|---|
| 1 | 0 | {} | 0 |
| 17 | 0 | {“1”:{}} | 1 |
| 16 | 500 | {“1”:{“2824”:[“148500”]},“48”:{“2890”:[]}} | 3 |
在 DB Fiddle 上查看
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/492043.html
標籤:mysql sql json 数据库 PostgreSQL
上一篇:LVGL庫入門教程03-布局方式
