2016-08-07 7 views
2

Das Bild unten ist ein Beispiel für die Datenbank, mit der ich arbeiten muss.Wie bekomme ich Top 10 und ORDER BY() von COUNT()

Es gibt mehrere Felder in der Datenbank - Benutzer-ID geht bis USER-0050

Was ich erreichen will, ist ein Top-10-Benutzeraktivität. Basierend auf dem Bild über dem gewünschten Ausgang ist:

User ID   Transaction 
USER-005   14 
USER-001   12 
USER-002   12 
USER-003   8 
USER-004   6 

Was ich bisher versucht:

SELECT DISTINCT (userid), count(TCODE) as Transaction 
FROM SAP_SECURITY_LOG 
GROUP BY TCODE, USERID 

aber meine Ausgabe ist nicht das, was ich erreichen will. Ich bekomme

UserID Transaction 
User-001  0 
User-001  1 
User-001  2 
User-001  3 
User-001  6 

Grundsätzlich möchte ich diese alle zusammen fusionieren und dann die Top-10-Transaktionen aller Benutzer-IDs erhalten (von allen 50 Benutzer-IDs)

Jede mögliche Anleitung geschätzt wird. Ich hoffe, was ich versuche, Sinn zu sagen, macht Image 1

Meine Ausgabe:

Image 2

Hält bis benutzer 0050 gehen

+1

Welche Datenbank Verwenden Sie (MySQl, Oracle, ...) –

+2

Und fügen Sie Beispieldaten und erwartetes Ergebnis für mehr als nur einen Benutzer hinzu. –

+0

Meine Datenbank wurde mir in einem Excel-Blatt gegeben und von dann habe ich es geschafft, es in MS Access zu bekommen ... wenn das hilft Ich habe mehr Daten und erwartetes Ergebnis für mehrere Benutzer hinzugefügt – aofe1337

Antwort

2

Top aktive Benutzer:

SELECT Top(10) userid, count(TCODE) as Transaction 
FROM SAP_SECURITY_LOG 
GROUP BY userID 
ORDER BY count(TCODE) DESC 
+1

Fügen Sie eine 'TOP 10' nach dem' SELECT' hinzu und das OP sollte die gewünschten Top 10 Benutzeraktivitäten aufgelistet bekommen ... –

1

Sie können die Top-Ten-Benutzer mit TOP

erhalten
SELECT TOP 10 userid, count(TCODE) as Transaction 
FROM SAP_SECURITY_LOG 
GROUP BY USERID 
ORDER BY count(TCODE) DESC ; 
+0

Sie brauchen 'DISTINCT' nicht, wenn Sie bereits' GROUP BY' ..... plus verwenden : Wenn Sie 'GROUP BY TCODE, USERID' haben, erhalten Sie die Ergebnisse, die der OP anzeigt, was ** NICHT ** ist, wonach er sucht. –

+0

@marc_s. richtig .. danke .. Antwort aktualisiert – scaisEdge

2
  • Sie können mit DESC (absteigend) ORDER BY in Kombination verwenden, um die Ergebnisse zu bestellen.
  • Sie können LIMIT verwenden, um die Ergebnisse auf einen bestimmten Wert zu beschränken, zB: LIMIT 10.
  • Um Ihren Code einfacher zu lesen (und einfacher für uns, Vorschläge zu machen), möchten Sie mit Ihrer Groß-/Kleinschreibung konsistent sein (zB verwenden Sie Großbuchstaben für SQL-Schlüsselwörter).

So könnten Sie ORDER BY transaction DESC LIMIT 10 verwenden, um Ihre gewünschten Ergebnisse zu erzielen.

Ihr Code:

SELECT DISTINCT (userid), count(TCODE) as Transaction 
FROM SAP_SECURITY_LOG 
GROUP BY TCODE, USERID 

Ihr Code meine Vorschläge mit:

SELECT userid, COUNT(tcode) as transactions_count 
FROM sap_security_log 
GROUP BY userid 
ORDER BY transactions_count DESC LIMIT 10 

ich mit meinem Vorschlag, ein funktionierendes Beispiel gemacht, so können Sie sehen, was die Abfrage funktioniert: http://sqlfiddle.com/#!9/2cc33/1/0