2

我正在对数据库中的帖子进行查询。如果帖子是对另一个帖子的响应,则它的parent_id值大于零,否则为零。

要生成帖子报告,我在 SELECT 中使用以下内容,然后按用户分组。

SELECT
    SUM(IF(parent_id = 0, 1, 0)) as 'NewPosts',
    SUM(IF(parent_id > 0, 1,0))  as 'Responses',
    COUNT(parent_id)             as 'TotalPosts',
FROM posts
GROUP BY user

现在我需要添加一列来显示用户的自我反应。就像是...

SUM(IF(parent_id IN id, 1, 0)) as 'SelfResponses'

当然,我知道这是错误的,但我希望它能传达这个想法。

编辑:数据看起来像:

User        Id        parent_id
Henry       12          0
Henry       24          12
Henry       32          16
Joseph      16          0

所以在这种情况下,输出将是:

User         NewPosts        Responses     TotalPosts        SelfResponses
Henry          2                2             3                    1
Joseph         1                0             1                    0
4

1 回答 1

1

假设响应的 parentId 是响应的 postId,那么您可以通过以下方式实现此目的

查询 1

SELECT
   a.user,
   SUM(IF(a.parent_id = 0, 1, 0)) as 'NewPosts',
   SUM(IF(a.parent_id > 0, 1,0))  as 'Responses',
   COUNT(a.parent_id)             as 'TotalPosts',
   SUM(IF(a.user = b.user, 1, 0)) as 'SelfResponses'
FROM 
  Table1 a
LEFT JOIN
  Table1 b
ON 
  a.parent_id = b.id
GROUP BY 
  a.user

结果

|   USER | NEWPOSTS | RESPONSES | TOTALPOSTS | SELFRESPONSES |
--------------------------------------------------------------
|  Henry |        1 |         2 |          3 |             1 |
| Joseph |        1 |         0 |          1 |             0 |

SQL 小提琴

希望这可以帮助

于 2013-04-02T07:57:02.593 回答