0

私の懸念を宣言する例を見てみましょう:
このような2つの列を持つテーブル(タグ)があるとします

UserID -------------------------------- Tag
1 -------------------------------------- SQL
1 -------------------------------------- Select
1 -------------------------------------- DB
2 -------------------------------------- SQL
2 -------------------------------------- Programming
2 -------------------------------------- Code
2 -------------------------------------- Software
3 -------------------------------------- Code
4 -------------------------------------- SQL
4 -------------------------------------- Code

UserIDに基づいて各タグのDISTINCT共起をカウントする必要があります

したがって、出力は次のようになります(共起による注文の説明付き):

Tag -------------------------------- Co-occurrences
---------------------------------------------
SQL --------------------------------------- 5
Programming ------------------------------- 3
Code -------------------------------------- 3
Software ---------------------------------- 3
Select ------------------------------------ 2
DB ---------------------------------------- 2

これは単なる例です。

これを実行できるSelectステートメントを作成するにはどうすればよいですか?

私は1つの方法を思いつきましたが、特定のタグは1つだけです。

SELECT count (distinct (Tag)) - 1 as Co_occurrences
FROM Tags
WHERE Tag is NOT NULL and UserID in
    (   SELECT UserID
        FROM Tags 
        where tag = 'SQL')

上記のステートメントを変更して、テーブル内のすべてのタグに対して一般的なものにすることは可能ですか?

4

2 に答える 2

1

AGROUP BYはあなたが探しているものです:

SELECT 
    UserID,
    Tag,
    COUNT(DISTINCT Tag) - 1 AS Co_occurrences
FROM Tags
GROUP BY UserID, Tag
ORDER BY UserID, Tag

編集:コメントで述べたように、上記は質問に答えません。@ OSA-Eの答えを少し改善して-1、カウント後に何が行われているのかを説明しました。

SELECT
  [t1].[Tag],
  COUNT(DISTINCT [t2].[Tag]) AS [Co_occurrences]
FROM [Tags] [t1]
INNER JOIN [Tags] [t2] ON [t1].[UserID] = [t2].[UserID]
WHERE [t1].[Tag] <> [t2].[Tag]
GROUP BY [t1].[Tag]
ORDER BY [Co_occurrences] DESC

これがフィドルです。

于 2013-02-07T21:21:29.477 に答える
1
SELECT t2.tag, count (distinct (t1.Tag)) - 1 as Co_occurrences
FROM Tags t1 inner join 
    Tags t2 on t1.UserId = t2.UserId 
GROUP BY t2.tag    
ORDER BY count (distinct (t1.Tag)) desc      
于 2013-02-07T21:33:47.563 に答える