Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Kann ich in einer Fensterfunktion auf Daten der aktuellen Zeile verweisen/zugreifen?

Angenommen, Sie verwenden MySQL und Ihre Tabelle hat den Namen test , und unter der Annahme, dass beide Spalten String-Typen sind:

SELECT
  t1.id, count(t2.list)
FROM
(test t1 LEFT JOIN test t2 ON
  (t2.list LIKE CONCAT('%,', t1.id, ',%')) OR
  (t2.list LIKE CONCAT('%,', t1.id)) OR
  (t2.list LIKE CONCAT(t1.id, ',%')))
GROUP BY t1.id;

Bitte beachten Sie, dass diese Lösung abhängig von der Anzahl Ihrer Datensätze und der durchschnittlichen Länge der Zeichenfolgen in der list sehr langsam sein kann Feld.

Wenn Sie etwas schneller brauchen, kann es meiner Meinung nach keine einzelne Abfrage sein. Vielleicht müssten wir dafür eine gespeicherte Prozedur oder Anwendungslogik schreiben oder zusätzliche Tabellen oder Spalten und eine Reihe mehrerer SQL-Anweisungen verwenden.