2017-07-20 4 views
0

Ich versuche, eine SQL-Abfrage zu schreiben, um die Partnerfirma zu erhalten, mit der jeder Benutzer am meisten interagiert hat. Für jede Interaktion mit der Partnerfirma gibt es eine Zeile. Die WHERE-Klausel gibt einen Fehler aus.Abfrage, um den Partner zu erhalten, hat jeder Benutzer die meisten Datensätze mit

SELECT user_id, partner_id, COUNT(partner_id) 
FROM users 
WHERE COUNT(partner_id) = MAX(COUNT(partner_id)) 
GROUP BY user_id, partner_id; 

Gibt es eine Möglichkeit die Zählung die maximale Anzahl für den Benutzer zu haben? Ohne das WHERE, in dem die Abfrage ausgeführt wird, erhalte ich jedoch eine Liste aller Partner, die mit jedem Benutzer interagiert haben, und die Anzahl der Interaktionen des Benutzers mit jedem Partner.

+3

Welche Datenbank verwenden Sie? – dasblinkenlight

+0

können Sie den Fehler posten bitte – Yoav24

+1

nach Anzahl und wählen Sie nur die oberste 1 Zeile. Oder verwenden Sie eine äußere Abfrage, bei der Sie das Maximum des inneren Ergebnisses auswählen. – ADyson

Antwort

0

Dieser Wert wird in Statistiken als "Modus" bezeichnet. Sie können es einfach mit ROW_NUMBER() berechnen:

SELECT user_id, partner_id, cnt 
FROM (SELECT user_id, partner_id, COUNT(*) as cnt 
      ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY COUNT(*) DESC) as seqnum 
     FROM users 
     GROUP BY user_id, partner_id 
    ) u 
WHERE seqnum = 1; 
Verwandte Themen