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);

令人惊叹的!就这样!