表1:可映射表(包含用句子映射的标签)
id tag_id sentence_id
1 10 30
2 11 40
表2报告
sentence_id DATE property (sentences may repeat)
30 timestamp1 property1
30 timestamp2 property2
40 timestamp3 property1
我正在尝试获取按时间分组的标签ID和标签数量。
我试过了这个查询
SELECT DISTINCT(tag_id),COUNT(tag_id) AS cnt, MONTH(DATE) AS mnt
FROM mappingtable
INNER JOIN reports
ON mappingtable .sentence_id=reports.sentence_id AND reports.property= 'property1' GROUP BY tag_id,mnt ORDER BY cnt DESC;
但是,如果句子在报告表中重复(通常是这种情况),那么标签的数量就会出错。
编辑:
尝试了下面建议的查询:
SELECT M.tag_id, COUNT(M.tag_id) AS cnt, MONTH(R.DATE) AS mnt FROM mappingtable M INNER JOIN reports R ON M.sentence_id = R.sentence_id AND R.property = 'property1' GROUP BY M.tag_id, MONTH(R.DATE) ORDER BY COUNT(M.tag_id) DESC;
由于重复句子ID,即使这个查询也会提供额外的计数。
我需要的是按月分组的属性property1的唯一句子,然后是那些句子的标签计数。
tag_id cnt mnt
60865 145 11
60869 99 11
60994 74 11
61163 74 11
答案 0 :(得分:0)
这样的事情:
SELECT
M.tag_id,
COUNT(M.tag_id) AS cnt,
MONTH(R.DATE) AS mnt
FROM mappingtable M
INNER JOIN reports R
ON M.sentence_id = R.sentence_id
AND R.property = 'property1'
GROUP BY M.tag_id,
MONTH(R.DATE)
ORDER BY COUNT(M.tag_id) DESC;
答案 1 :(得分:0)
内连接将采用两个表共有的记录。我相信这就是为什么你得到错误的标签数量。即使句子有两个属性,连接中也只会出现一个。