2016-11-15 3 views
1

Ich habe die folgende Tabelle, die IDs und UserId enthält.SQL - Anzahl der Ergebnisse von 2 Spalten

ID   UserID 
1111   11 
1111   300 
1111   51 
1122   11 
1122   22 
1122   3333 
1122   45 

Ich versuche, die unterschiedliche Anzahl von ‚IDs‘ zu zählen, so dass ich insgesamt bekommen, aber ich brauche auch insgesamt IDs zu erhalten, die auch als auch die, dass bestimmte ID gesehen hat ... Um die IDs zu erhalten, musste ich eine Unterabfrage in einer anderen Tabelle durchführen, um IDs zu erhalten, die ich dann in die Hauptabfrage übergebe ... Jetzt möchte ich nur, dass die Ergebnisse wie folgt angezeigt werden.

So bekomme ich eine Gesamt Nein für ID und eine Gesamtzahl für Benutzer-ID - Auch eine weitere Spalte hinzufügen möchten für jede ID als auch den Durchschnitt erhalten

TotalID Total_UserID Average 
2   7    3.5 

Wenn möglich würde ich auch bekommen möchte ein Durchschnitt, aber nicht sicher, wie man das berechnet. Also müsste ich alle 'UserIDs für eine ID zählen, sie addieren und dann den AVG finden. (Irgendwelche Hinweise auf diese Kalkulation würden geschätzt werden.)

Aktuelle Abfrage.

Welche dann Listet alle IDs und COUNT alle USERID .. Ich möchte insgesamt beide Spalten. Ich habe versucht, die Abfrage in einer

SELECT COUNT(*) FROM ( 
warpping aber das zählt nur die IDs, die groß ist, aber wie ich zähle die USERID Spalte als auch

+0

‚Ich brauche auch insgesamt IDs zu erhalten, die auch die, dass bestimmte ID gesehen haben‘ Sie zeigen nie eine bestimmte ID - sind Sie wollen nur wissen, wie viele verschiedene IDs gibt es wie viele UserId gibt es? – Cato

Antwort

3

Sie sich em dies wollen:

SELECT COUNT(DISTINCT a.ID), COUNT(b.UserID), 
     COUNT(b.UserID) * 1.0/COUNT(DISTINCT a.ID) 
FROM a INNER JOIN 
    b 
    ON someID = someID 
WHERE a.ID IN (SELECT ID FROM c WHERE GROUPID = 9999); 

Hinweis: DISTINCT ist nicht eine Funktion. Es gilt für die ganze Zeile, so dass es irreführend ist, einen Ausdruck in Klammern dahinter zu setzen.

Auch die GROUP BY ist nicht erforderlich.

Die 1.0 ist, weil SQL Server Ganzzahlarithmetik und dies ist eine einfache Möglichkeit, eine Zahl in ein Dezimalformat konvertieren.

+0

Meine Probleme behoben, Sieht so aus, als wäre ich nicht so weit davon entfernt, die Syntax richtig zu machen .. Danke. Jetzt muss ich alle meine Fragen miteinander verknüpfen. – Boardman411

+0

Eine letzte Frage - Ist es möglich, das Ergebnis von AVERAGE auf eine ganze Zahl zu runden? – Boardman411

+0

@ Boardman411. . . Das ist definitiv nicht die Frage, die du gestellt hast, aber du kannst 'round()' verwenden. –

0

Sie können

SELECT COUNT(DISTINCT a.ID) ... 

zu zählen, um alle unterschiedlichen Werte

lesen Details here

0

Ich glaube, Sie dies wünschen:

select TotalID, 
    Total_UserID, 
    sum(Total_UserID+TotalID) as Total, 
    Total_UserID/TotalID as Average 
from (
    SELECT (DISTINCT a.ID) as TotalID 
    ,COUNT(b.UserID) as Total_UserID 
    FROM a 
    INNER JOIN b ON someID = someID 
    WHERE a.ID IN (SELECT ID FROM c WHERE GROUPID = 9999) 
) x 
Verwandte Themen