簡體   English   中英

僅當 mysql 中滿足條件時才對結果進行分組

[英]Group results only if a condition is met in mysql

只有當用戶 ID 和月份創建日期相同時,有沒有辦法對結果進行分組?

用戶身份 created_at
1 3 2021-12-06 14:11:14
1 1 2021-11-06 14:11:14
1 2 2021-12-06 14:11:14
SELECT
    *
FROM
    table_name
GROUP BY
    user_id,
    DATE_FORMAT(created_at, '%m-%y')
ORDER BY
    rank DESC

通過查詢,我得到如下

用戶身份 created_at
1 3 2021-12-06 14:11:14

我需要的是獲得以下結果:

因為記錄來自不同的月份:2021-12-06 14:11:14 - 2021-11-06 14:11:14

用戶身份 created_at
1 3 2021-12-06 14:11:14
1 1 2021-11-06 14:11:14

您似乎希望每個用戶每月獲得最高排名,因此 max(rank) 是合適的,沒有聚合函數的 group_by 也不合適。

DROP table if exists t;

create table t
(user_id int,   rnk int,    created_at datetime);
insert into t values
(1, 3   ,'2021-12-06 14:11:14'),
(1, 1   ,'2021-11-06 14:11:14'),
(1, 2   ,'2021-12-06 14:11:14');

sELECT
    t.user_id,max(t.rnk) `rank` ,DATE_FORMAT(created_at, '%m-%y') ym
FROM
    t
GROUP BY
    user_id,
    DATE_FORMAT(created_at, '%m-%y')
ORDER BY
    `rank` DESC

+---------+------+-------+
| user_id | rank | ym    |
+---------+------+-------+
|       1 |    3 | 12-21 |
|       1 |    1 | 11-21 |
+---------+------+-------+
2 rows in set (0.001 sec)

在下方查詢產品您需要的output。

SELECT
    user_id,rank,
    created_at
FROM
    table_name
GROUP BY
    user_id,
    created_at
ORDER BY
    rank DESC

https://www.db-fiddle.com/f/aBgB6QdMGe3ZmX65u9mXFC/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM