基于总和的订购

时间:2013-01-17 18:25:59

标签: mysql group-by sum

我有三个mysql表:文章,类别和标签。

我希望获得链接到文章的所有类别和标签的列表,并按照每个文章发生的次数进行排序。

文章表格包含以下列:article_id和name

类别和标签表包含以下列:article_id和tid。

最终我正在寻找tids。

以下是表格的示例:

ARTICLES
article_id   name 
1            Article 1
2            Article 2
3            Article 3
4            Article 4

CATEGORIES
article_id   tid
1            100
2            100
3            100
4            101

TAGS
article_id   tid
1            200
2            200
3            200
4            200
3            201
4            201

我希望看到的是:

RESULTS
tid          count
200          4
100          3
201          2
101          1

因为tid 200使用4次,tid 100使用3次,tid 201使用2次,tid 101使用1次。

和想法?

1 个答案:

答案 0 :(得分:2)

假设您tidcategories

中的tags永远不会相同
SELECT a.tid, a.count
FROM
  (SELECT tid, COUNT(article_id) AS count
  FROM categories
  GROUP BY tid
  UNION ALL
  SELECT tid, COUNT(article_id) AS count
  FROM tags
  GROUP BY tid) a
ORDER BY a.count DESC

See the demo

如果您有重复项,请使用:

SELECT a.tid, COUNT(article_id) AS count
FROM
  (SELECT tid, article_id 
  FROM categories
  UNION ALL
  SELECT tid, article_id
  FROM tags) a
GROUP BY a.tid
ORDER BY COUNT(article_id) DESC

See the demo

<强>结果

| TID | COUNT |
---------------
| 200 |     4 |
| 100 |     3 |
| 201 |     2 |
| 101 |     1 |