0

表 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
4

2 に答える 2

0

内部結合は、両方のテーブルに共通のレコードを取得します。タグの数が間違っているのはそのためだと思います。文に 2 つのプロパティがある場合でも、結合で出現するのは 1 つだけです。

于 2013-11-05T06:51:43.857 に答える
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;
于 2013-11-05T06:38:12.990 に答える