4 Stimmen

Zählen Sie die Vorkommen von unterschiedlichen Werten in 2 Feldern

Ich versuche, eine MySQL-Abfrage zu finden, die eindeutige Werte in einem bestimmten Feld findet, die Anzahl der Vorkommen dieses Werts in 2 Feldern (1_user, 2_user) zählt und dann die Ergebnisse nach der Anzahl sortiert.

Beispiel-DB

+------+-----------+-----------+
|   id | 1\_user    | 2\_user    |
+------+-----------+-----------+
|    1 |       2   | 1         | 
|    2 |       3   | 2         | 
|    3 |       8   | 7         | 
|    4 |       1   | 8         | 
|    5 |       2   | 8         |
|    6 |       3   | 8         |  
+------+-----------+-----------+

Erwartetes Ergebnis

user       count
-----      -----
8          4
2          3
3          2
1          2

0 Stimmen

Was möchtest du bekommen? Unterschiedliche Werte im Feld 1_user und 2_user?

0 Stimmen

Sie sollten user = 7 & count = 1 im erwarteten Ergebnis einbeziehen. Sehen Sie sich diese Fiddle an.

6voto

Andy Punkte 10195

Die Abfrage

SELECT Benutzer, count(*) AS Anzahl
FROM
(
    SELECT 1_Benutzer AS BENUTZER FROM test

    UNION ALL

    SELECT 2_Benutzer FROM test
) AS alle_Benutzer
GROUP BY Benutzer
ORDER BY Anzahl DESC

Erklärung

Liste alle Benutzer in der ersten Spalte auf.

SELECT 1_Benutzer AS BENUTZER FROM test

Kombiniere sie mit den Benutzern aus der zweiten Spalte.

UNION ALL
SELECT 2_Benutzer FROM test

Der Trick hier ist das UNION ALL, das doppelte Werte beibehält.

Der Rest ist einfach - wähle die Ergebnisse aus der Unterabfrage aus:

SELECT Benutzer, count(*) AS Anzahl

aggregiere nach Benutzer:

GROUP BY Benutzer

und bestimme die Reihenfolge:

ORDER BY Anzahl DESC

2voto

pjama Punkte 2995
SELECT u, COUNT(u) AS cnt 
FROM (
    SELECT 1_user AS u FROM table
    UNION ALL
    SELECT 2_user AS u FROM table
) subquery 
GROUP BY u
ORDER BY cnt DESC

1voto

ronalchn Punkte 11975

Nehmen Sie die 2 Abfragen:

SELECT COUNT(*) FROM table GROUP BY 1_user

SELECT COUNT(*) FROM table GROUP BY 2_user

Jetzt kombinieren Sie sie:

SELECT user, SUM(count) FROM
  ((SELECT 1_user as user FROM table)
  UNION ALL
  (SELECT 2_user as user FROM table))
GROUP BY user, ORDER BY count DESC;

0voto

codingbiz Punkte 25598

Ich denke, das ist das, wonach Sie suchen, da Ihr erwartetes Ergebnis die 7 nicht enthielt

select usr, count(usr) cnt from
(
   select user_1 usr from users
   union all
   select user_2 usr from users
) u
where u.usr in (select user_1 from users)
group by usr
order by count(u.usr) desc

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X