2017-07-22 2 views
0

Abfrage # 1:Wie kann Selfjoin mit Count in SQL Server verwendet werden?

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 

Arbeits ..........

Abfrage # 2:

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

Arbeits .......... ....

ich brauche Abfrage # 3:

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 

Aber das funktioniert nicht ...

Wie können wir Self-Join mit Count in SQL Server verwenden?

+0

Helfen Sie uns, Ihnen zu helfen - Können Sie einige Beispieldaten teilen, das Ergebnis, das Sie dafür erhalten, und das Ergebnis, das Sie versuchen zu bekommen? – Mureinik

+0

können Sie die Fehlermeldung anhängen? –

+0

Sollte es nicht TxVotes.timestamp und Comments.language sein? –

Antwort

2

Die korrekte Syntax ist:

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); 

Ich bin sicher, beachten Sie, wenn Sie Wähler oder eine Kombination von Stimmen und Kommentare zählen wollen. Ich schätze Wähler, daher COUNT(DISTINCT).

Hinweise:

  • Nie Kommas in der FROM Klausel. Immer verwenden Sie die richtige, explizite JOIN Syntax.
  • Ich bezweifle, dass Sie Datensätze von genau Mitternacht am 2017-07-22 aufnehmen möchten. Daher ist >= und < besser als BETWEEN.
  • Tabellenaliasnamen erleichtern das Schreiben und Lesen der Abfrage. In Ihrem Fall sollten sie auch Ihre Verwirrung lindern. Sie qualifizieren Spaltennamen mit Tabellennamen. Sie qualifizieren keine Funktionen.
  • COUNT(DISTINCT v.voter) sollte die Anzahl der Stimmen zählen. Dies behandelt den Fall, in dem mehrere Kommentare für einen einzelnen Wähler vorhanden sind. Hinweis: Normalerweise würde ich dies mit IN oder EXISTS behandeln, aber ich habe Ihre ursprüngliche Logik gefolgt.
+0

Wenn du DISTINCT v.voter und Gruppierung nach v.voter zählst, wird die Zählung nicht immer 1 sein? Vielleicht unterschiedliche TxVotes.PK_column zählen? – Skippy