Vergleichen von Zeilen derselben Tabelle mit mehreren Bedingungen

Pavan

Hier ist eine Tabelle

ID | Player | Position | Points
1  | Ryan   | QB       | 75
2  | Matt   | RB       | 80
3  | Mike   | WR       | 66
4  | Jay    | QB       | 71
6  | Alvin  | TE       | 73
7  | Adrian | TE       | 84
8  | Hill   | WR       | 71
9  | Charles| RB       | 53
10 | Bell   | WR       | 87
11 | Rob    | TE       | 49
12 | Alex   | RB       | 92
13 | Drew   | QB       | 84
14 | Mack   | TE       | 59
15 | Nick   | WR       | 33

Ich möchte alle Spieler auf der Position des Spielers mit den höchsten Punkten und die besten 2 Spieler der anderen Positionen melden. In diesem Beispiel hat "Alex" die höchsten Punkte und ist ein "RB". Ich möchte also alle Spieler aus "RB" und Top 2 aus "QB", "TE", "WR" melden und nach Punkten mit in jeder Gruppe ordnen. Ich benutze sqlite3. Ich kann dies programmgesteuert mit Python und sqlite3 tun, aber ich habe mich gefragt, ob dies nur mit sql möglich ist

ID | Player | Position | Points
12 | Alex   | RB       | 92
2  | Matt   | RB       | 80
9  | Charles| RB       | 53
13 | Drew   | QB       | 84
1  | Ryan   | QB       | 75
10 | Bell   | WR       | 87
8  | Hill   | WR       | 71
7  | Adrian | TE       | 84
6  | Alvin  | TE       | 73

Danke für Ihre Hilfe

Gordon Linoff

Dies ist in "traditionellem" SQLite schwierig. Ich würde empfehlen union all:

with top1 as (
      select t.*
      from t
      order by points desc
      limit 1
     )
select t.*
from t
where t.position = (select t1.position from top1 t1)
union all
select t.*
from t
where t.position <> (select t1.position from top1 t1) and
      (select count(*)
       from t t2
       where t2.position = t.position and
             t2.points >= t.points
      ) <= 2;

Dies setzt voraus, dass die pointsWerte eindeutig sind. Bindungen sind in SQLite viel schwieriger zu handhaben.

Ich könnte Ihnen empfehlen, ein Upgrade auf SQLite Version 3.25.0 in Betracht zu ziehen oder eine andere Datenbank zu verwenden. Eine solche Abfrage wäre mit ISO/ANSI-Standardfensterfunktionen viel einfacher.

Mit Fensterfunktionen würde es so aussehen:

select t.*
from (select t.*,
             row_number() over (partition by position order by points desc) as seqnum,
             first_value(position) over (order by points desc) as first_position
      from t
     ) t
where seqnum <= 2 or position = first_position

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Vergleichen von zwei Zeilen in derselben Tabelle SQL

Zeilen mit mehreren entsprechenden Werten in derselben Tabelle

SQL-Auswahl mit mehreren Bedingungen in derselben Tabelle

Linq-Abfrage aus derselben Tabelle mit mehreren Bedingungen

So erhalten Sie Zeilen aus derselben Tabelle mit unterschiedlichen Bedingungen

Vergleichen von Daten aus zwei Zeilen in derselben SQL-Tabelle

Vergleichen von Daten in derselben Tabelle für nicht vorhandene Zeilen

Vergleichen Sie 2 Zeilen in derselben Tabelle von PowerBI

SQL Vergleichen Sie Zeilen einer Tabelle mit mehreren Spalten

Festgefahren mit mehreren Bedingungen und Vergleichen von Saiten

Konvertieren Sie SQL mit mehreren Joins (mit mehreren Bedingungen) derselben Tabelle in LINQ

So vergleichen Sie 2 Zeilen in derselben Tabelle

Update von einer anderen Tabelle mit mehreren Bedingungen

TakeWhile() mit Bedingungen in mehreren Zeilen

Aktualisieren von Zeilen mit Spalten aus derselben Tabelle

SQL - Aktualisieren Sie mehrere Zeilen gleichzeitig mit Werten aus mehreren anderen Zeilen in derselben Tabelle

Kopieren von Daten aus Zeilen in derselben Tabelle, wenn mehrere Bedingungen erfüllt sind

UPDATE/INSERT-Tabelle mit mehreren Schleifen für ausgewählte Zeilen mit WHERE-Bedingungen

Vergleichen Sie die Zeile mit anderen Zeilen in derselben Tabelle im SQL-Server

Abrufen von Zeilen aus einer Tabelle mit mehreren Abhängigkeiten

SQL JOIN in derselben Tabelle mit 2 Bedingungen

Tabelle mit mehreren Zeilen aktualisieren

Vergleichen von Zeilenwerten aus derselben Tabelle

MySQL-Mehrfachverknüpfungen mit mehreren Bedingungen und Ignorieren von Zeilen basierend auf anderen Zeilen

Wie kann ich eine Zeile mit mehreren anderen Zeilen in derselben Tabelle verknüpfen?

Zufallsstichprobe von Zeilen "mit mindestens x von jeder Gruppe" mit mehreren Bedingungen

Vergleichen Sie Werte mit mehreren Bedingungen mithilfe von zwei data.frames

TSQL Tabellen basierend auf mehreren Zeilen derselben Spalte vergleichen?

Durch alle Zeilen mit mehreren Bedingungen iterieren