2017-07-22 7 views
0

クエリ#1:SQL Serverでselfjoinをcountで使用するにはどうすればよいですか?

SELECT 
    voter, COUNT(*) AS voter 
FROM 
    TxVotes 
WHERE 
    timestamp BETWEEN '2017-07-21 00:00:00.000' and '2017-07-22 00:00:00.000' 
GROUP BY 
    voter 
ORDER BY 
    COUNT(*) DESC 

作業..........

クエリ#2:

SELECT 
    author 
FROM 
    Comments 
WHERE 
    AND language LIKE '%"ko"%' 

作業..........

SELECT 
    TxVotes.voter, TxVotes.count(*) AS TxVotes.voter 
FROM 
    TxVotes, Comments 
WHERE 
    TxVotes.voter = Comments.author 
    AND timestamp TxVotes.BETWEEN '2017-07-21 00:00:00.000' AND '2017-07-22 00:00:00.000' 
    AND Comments language LIKE '%"ko"%' 
GROUP BY 
    TxVotes.voter 
ORDER BY 
    TxVotes.count(*) DESC 
:....

私は、クエリ#3が必要

しかし、これは動作していない...

どのように我々は自己を使用することができますが、SQL Serverの数に参加?

+0

ヘルプ、私たちはあなたを助ける - あなたは、あなたがそれ、あなたが取得しようとしている結果を取得している結果をいくつかのサンプルデータを共有することはできますか? – Mureinik

+0

エラーメッセージを添付できますか? –

+0

TxVotes.timestampとComments.languageではないはずですか? –

答えて

2

正しい構文は次のとおりです。私は

SELECT v.voter, COUNT(v.id) as numvoters 
FROM TxVotes v JOIN 
    Comments c 
    ON t.voter = c.author 
WHERE v.timestamp >= '2017-07-21' AND 
     v.timestamp < '2017-07-22' AND 
     c.language LIKE '%"ko"%' 
GROUP BY v.voter 
ORDER BY COUNT(DISTINCT v.id); 

あなたは有権者または投票やコメントのいくつかの組み合わせをカウントしたい場合は必ず注意してください。私は有権者を推測しているので、COUNT(DISTINCT)です。

注:FROM句の

  • 決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。
  • 私はあなたが2017年7月22日に丁度真夜中からレコードを含める疑います。したがって、>=<BETWEENよりも優れています。
  • テーブルのエイリアスを使用すると、クエリの書き込みと読み取りが容易になります。あなたの場合、彼らはまたあなたの混乱を緩和する必要があります。列名は表名で修飾します。あなたは関数を修飾しません。
  • COUNT(DISTINCT v.voter)は、投票数をカウントする必要があります。これは、単一の投票者に対して複数のコメントが存在する場合を処理します。通常、私はINまたはEXISTSを使用してこれを処理するだろうが、私はあなたのオリジナルのロジックを追ってきました:注意してください。
+0

DISTINCT v.voterをカウントしてv.voterでグループ化している場合、カウントは常に1になりませんか?多分TxVotes.PK_columnを数えますか? – Skippy

関連する問題