3

我很难找到一种清晰、通用的方式来表达这个问题,如果重复了,我深表歉意。情况如下:

我有一个记录协作标记数据的表,每一行都存储一个注释(即特定用户在特定时间用特定标签标记特定项目)。为了清楚起见,这是一个示例:

+---------+---------+--------+------------+
| user_id | item_id | tag_id | tag_month  |
+---------+---------+--------+------------+
| 1040740 |    2653 |   1344 | 2005-07-01 |
| 1040740 |    3602 |   1344 | 2005-07-01 |
| 1040740 |   17746 |    217 | 2005-07-01 |
| 1040740 |   21426 |   1344 | 2005-07-01 |
| 1040740 |   22224 |    180 | 2005-07-01 |
+---------+---------+--------+------------+

...等等。我要逐月计算的是所有项目中每个项目的平均注释数。换句话说,对于每个月,该月每个唯一项目的平均行数是多少?我的数据集总共跨越 94 个月,因此我想要的查询输出应该是 94 行,每行都有该月每个项目的平均注释数。请注意,“user_id”列与此完全无关。

4

2 回答 2

5

我认为您只需要执行相应的 COUNT 即可:

SELECT 
  COUNT(DISTINCT item_id),
  YEAR(tag_month),
  MONTH(tag_month)
FROM
  t
GROUP BY
  YEAR(tag_month),
  MONTH(tag_month)

不知道你是否想得到item_id,但是,如果你需要,那么:

SELECT 
  COUNT(1),
  item_id,
  YEAR(tag_month),
  MONTH(tag_month)
FROM
  t
GROUP BY
  item_id,
  YEAR(tag_month),
  MONTH(tag_month)
于 2013-09-06T13:57:45.147 回答
2

与 Alma Do Mundo 给出的每月每个项目的平均标签数量的答案略有偏差。

SELECT 
  COUNT(*) / COUNT(DISTINCT item_id) as tag_average,
  YEAR(tag_month),
  MONTH(tag_month)
FROM
  t
GROUP BY
  YEAR(tag_month),
  MONTH(tag_month)
于 2013-09-06T14:41:51.873 回答