我很难找到一个明确的,通用的方法来表达这个问题,所以如果这是重复的话,请道歉。情况如下:
我有一个记录协作标记数据的表,每行存储一个注释(即特定用户在特定时间用特定标记标记特定项目)。为清晰起见,这是一个示例:
+---------+---------+--------+------------+
| 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”列与此完全无关。
答案 0 :(得分: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)
答案 1 :(得分: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)