1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

sakila datenbank übung

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von thobuc, 30 Dezember 2017.

  1. thobuc

    thobuc Neuer Benutzer

    Hallo,
    ich habe eine Übungsaufgabe erhalten, diese Bezieht sich auch die SAKILA-Datenbank.
    Im Internet kann man das Schema dazu sehr leicht finden. Weiterleitungshinweis

    Folgender Script gib mir für den Kunden mit der ID 2 aus, welcher Schauspieler( nur die ID es Schauspielers ) am häufigsten in den ausgeliehenen Filmen mitgespielt hat.

    Jetzt soll dieses Script jedoch für alle Kunden (TABELLE customer >> customer_id)
    durchgeführt werden. Hat von euch jemand eine Idee, wie ich das umsetzen kann?

    Ich verwende MYSQL(MARIADB) mit der MYSQL-Workbench

    Mit freundlichen Grüßen
    thobuc

    Code:
    SELECT TBL_AID_ACN.actor_id
    
        FROM
        (SELECT fac.actor_id AS actor_id, COUNT(*) AS count_actor
            FROM rental r
            INNER JOIN inventory i ON r.inventory_id = i.inventory_id
            INNER JOIN film_actor fac ON i.film_id = fac.film_id
            WHERE r.customer_id = 2
            GROUP BY fac.actor_id) TBL_AID_ACN /*actor_id, count OF cunsomer*/
    
        WHERE TBL_AID_ACN.count_actor =
        (SELECT MAX(TBL_AID_ACN.count_actor)
         
            FROM (SELECT fac.actor_id AS actor_id, COUNT(*) AS count_actor FROM rental r
                INNER JOIN inventory i ON r.inventory_id = i.inventory_id
                INNER JOIN film_actor fac ON i.film_id = fac.film_id
                WHERE r.customer_id = 2
                GROUP BY fac.actor_id) TBL_AID_ACN /*actor_id, count OF cunsomer*/
          )
     
  2. thobuc

    thobuc Neuer Benutzer

    Kleine Information: Die komplette Aufgabenbeschreibung sieht wie folgt aus:
    Zu jedem Kunden (customer) den (first_name, last_name) ausgeben und den Lieblingsschauspieler (actor) mit (acotr_id, first_name, last_name), danach Soll noch die Anzahl der Filme in denen Dieser mitgespielt hat ausgegeben werden. Ob jetzt die Anzahl der Filme im Gesamten oder nur die Anzahl der Filme, aus denen die ausgeliehen wurden, ist nicht eindeutig formuliert. Jedoch ist die Definition für Lieblingsschauspieler folgende: Der Schauspieler, der in den meisten geliehenen Filmen mit gespielt hat.

    Mit freundlichen Grüßen
    thobuc
     
  3. thobuc

    thobuc Neuer Benutzer

    Hier mal ein Komplet anderer Ansatz. Ich habe die Aufgabe jetzt folgendermaßen gelöst.
    Vielleicht könntet Ihr das ganze mal überfliegen und Verbesserungen vorschlagen, falls jemand belesen genug ist,
    die ganze Sache überhaupt zu verstehen. Ich hatte mächtig Probleme damit und bin mir nicht mal sicher,
    dass ich hier keinen Denkfehler drin habe.

    Code:
    SELECT J1.cln, J1.cfn, J1.aid, J1.aln, J1.afn, MAX(J1.count) acn FROM customer _c  
        INNER JOIN ( SELECT c.customer_id cid, c.last_name cln, c.first_name cfn, ACOTR.aid aid, ACOTR.aln aln, ACOTR.afn afn, COUNT(ACOTR.aid) count
        FROM customer c
    
            INNER JOIN ( SELECT r.customer_id cid, a.actor_id aid, a.last_name aln, a.first_name afn FROM rental r
                INNER JOIN inventory i ON r.inventory_id = i.inventory_id
                INNER JOIN film_actor fac ON i.film_id = fac.film_id
                INNER JOIN actor a ON fac.actor_id = a.actor_id
            ) ACOTR ON c.customer_id = ACOTR.cid
            GROUP BY c.customer_id, ACOTR.aid
    
        ) J1 ON _c.customer_id = J1.cid
        GROUP BY _c.customer_id
    ;
     
  4. thobuc

    thobuc Neuer Benutzer

    Hallo,
    der Letzte Post ist fehlerhaft. Ich weis leider nicht wie ich diesen löschen kann.
    Hier jetzt hoffentlich endgültig die korrekte Lösung:

    Code:
    SELECT T1.last_name, T1.first_name, T1.aid, T1.aln, T1.afn, T1.count
    FROM    (    SELECT c.customer_id, c.last_name, c.first_name, ACOTR.aid, ACOTR.aln, ACOTR.afn, COUNT(ACOTR.aid) count    -- T1
                FROM customer c
                INNER JOIN    (    SELECT r.customer_id cid, a.actor_id aid, a.last_name aln, a.first_name afn                    -- ACTOR
                                FROM rental r
                                INNER JOIN inventory i ON r.inventory_id = i.inventory_id
                                INNER JOIN film_actor fac ON i.film_id = fac.film_id
                                INNER JOIN actor a ON fac.actor_id = a.actor_id
                            )    ACOTR ON c.customer_id = ACOTR.cid
                GROUP BY c.customer_id, ACOTR.aid
            )    T1
    
    WHERE T1.count = ( SELECT MAX(T2.count) FROM    (    SELECT c.customer_id, c.last_name, c.first_name, ACOTR.aid, ACOTR.aln, ACOTR.afn, COUNT(ACOTR.aid) count    -- T2
                                                        FROM customer c
                                                        INNER JOIN    (    SELECT r.customer_id cid, a.actor_id aid, a.last_name aln, a.first_name afn                    -- ACTOR
                                                                        FROM rental r
                                                                        INNER JOIN inventory i ON r.inventory_id = i.inventory_id
                                                                        INNER JOIN film_actor fac ON i.film_id = fac.film_id
                                                                        INNER JOIN actor a ON fac.actor_id = a.actor_id
                                                                    )    ACOTR ON c.customer_id = ACOTR.cid
                                                        GROUP BY c.customer_id, ACOTR.aid
                                                    ) T2
                                            WHERE T2.customer_id = T1.customer_id
                    )
    
    
    ;
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden