我如何计算帖子数量?

时间:2017-08-19 04:24:27

标签: mysql count

这是我的表结构:

-- reputations
+----+-------------+---------+-------+------------+------------+
| id | post_id     | user_id | score | reputation | date_time  |
+----+-------------+---------+-------+------------+------------+ -- Suppose:
| 1  | 1           | 1       | 1     | 5          | 1500489844 | -- out of last week
| 2  | 4           | 3       | -1    | -2         | 1500499815 | -- out of last week
| 3  | 2           | 3       | 1     | 5          | 1500584821 |
| 4  | 3           | 1       | 1     | 5          | 1501389166 |
| 5  | 2           | 4       | 1     | 5          | 1501399142 |
| 6  | 2           | 1       | -1    | -2         | 1501399142 |
| 7  | 4           | 1       | 0     | 15         | 1501481186 |
| 8  | 5           | 1       | 1     | 5          | 1501481297 |
+----+-------------+---------+-------+------------+------------+
-- Note: the last row came from an accepted-answer, that's why its score is 0

-- post_tag
+---------+--------+
| post_id | tag_id |
+---------+--------+
| 1       | 2      |
| 1       | 4      |
| 2       | 2      |
| 3       | 1      |
| 3       | 4      |
| 4       | 3      |
| 5       | 1      |
+---------+--------+

-- tags
+----+--------+
| id |  name  |
+----+--------+
| 1  | php    |
| 2  | html   |
| 3  | css    |
| 4  | mysql  |
+----+--------+

这是我的疑问:

SELECT
    t.tag, sum(r.reputation) AS tag_reputation, sum(r.score) AS tag_score
FROM
    users u
    LEFT JOIN reputations r 
        ON r.user_id = u.id 
            AND r.date_time > 1500584821
    JOIN post_tag pt ON pt.post_id = r.post_id
    JOIN tags t ON t.id = pt.tag_id
WHERE u.id = 1 -- Specific user: Jack
GROUP BY
    u.id, u.user_name, t.tag 
ORDER BY
    u.id, tag_reputation DESC;

以下是目前的结果:

tag   | tag_reputation |  tag_score
----: | :------------- | :---------
css   |             15 |          0
php   |             10 |          2
mysql |              5 |          1
html  |             -2 |         -1

如您所见,结果是一个标签列表,其中包含按tag_reputation排序的特定用户的信誉和分数。的 Fiddle

现在我还想计算每个标签的帖子数量。所以这是预期结果

tag   | tag_reputation |  tag_score | post_num
----: | :------------- | :--------- | :-------
css   |             15 |          0 |        1
php   |             10 |          2 |        2
mysql |              5 |          1 |        1
html  |             -2 |         -1 |        1

我该怎么做?我想我必须处理post_id列和GROUP BY子句。但我不知道究竟是怎么回事。

0 个答案:

没有答案