簡體   English   中英

使用多個表的SQL計數

[英]SQL count using multiple tables

表1:mappingtable(其中包含帶有句子的標簽映射)

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

像這樣:

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;

內部聯接將采用兩個表共有的記錄。 我相信這就是為什么您獲得錯誤的標簽計數的原因。 即使一個句子具有兩個屬性,聯接中也只會出現一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM