MySQL查询中的groupby
假设我有一张这样的桌子:MySQL查询中的groupby,mysql,sql,Mysql,Sql,假设我有一张这样的桌子: +---------+------------------+ | post_id | original_post_id | +---------+------------------+ | 1 | 0 | | 2 | 0 | | 3 | 0 | | 4 | 2 | | 5 | 2
+---------+------------------+
| post_id | original_post_id |
+---------+------------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
| 5 | 2 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 0 |
| 11 | 0 |
| 12 | 3 |
+---------+------------------+
+---------+------------------+
| post_id | original_post_id |
+---------+------------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
| 6 | 0 |
| 7 | 1 |
| 10 | 0 |
| 11 | 0 |
| 12 | 3 |
+---------+------------------+
简而言之,在这个表中,我包含了用户的帖子,我想显示一些类似于时间线的东西。所有记录(其原始帖子id=0)都是原始帖子,在任何情况下都必须显示。但是所有带有原始发布id的记录=0
-是重新发布的,因此我只想显示一次。因此,我需要这样的东西:
+---------+------------------+
| post_id | original_post_id |
+---------+------------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
| 5 | 2 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 0 |
| 11 | 0 |
| 12 | 3 |
+---------+------------------+
+---------+------------------+
| post_id | original_post_id |
+---------+------------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
| 6 | 0 |
| 7 | 1 |
| 10 | 0 |
| 11 | 0 |
| 12 | 3 |
+---------+------------------+
据我所知,我必须使用分组方式
,但具体如何使用?您可以尝试以下方法:
SELECT * FROM tableName
Where original_post_id = 0
Union
SELECT * FROM tableName
Where original_post_id != 0
Group by original_post_id
您可以使用单个
分组方式来完成此操作,但这很棘手:
select min(post_id) as post_id, min(original_post_id)
from t
group by original_post_id,
(case when original_post_id = 0 then post_id end);
令人惊叹的!就这样!