计算MySQL中每个项目的平均行数

mou*_*hio 2 mysql

我很难找到一个明确的,通用的方法来表达这个问题,所以如果它是重复的话,我会道歉.情况如下:

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

+---------+---------+--------+------------+
| 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 |
+---------+---------+--------+------------+
Run Code Online (Sandbox Code Playgroud)

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

Alm*_* Do 5

我想你只需要做相应的COUNT:

SELECT 
  COUNT(DISTINCT item_id),
  YEAR(tag_month),
  MONTH(tag_month)
FROM
  t
GROUP BY
  YEAR(tag_month),
  MONTH(tag_month)
Run Code Online (Sandbox Code Playgroud)

不知道你是否想要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)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个SQLFiddle(假设他只想要每个项目的个体平均值,在这种情况下计算):http://sqlfiddle.com/#!2/f15871/4 (3认同)