Trädvy Permalänk
Medlem
Plats
Brunflo
Registrerad
Jul 2010

SQL frågor

Har lite funderingar och behöver lite tips på lösningar när det gäller SQL frågor.

Har en exempeldatabas som heter Pagila där jag vill få ut en del information. Bland annat vilken skådespelare som har varit med i flest filmer. Jag kan få ut en lista som sorterar dessa i ordningsföljd på flest filmer. Antal filmer är ett värde som räknas ut i SQL frågan som är följande.

SELECT actor.actor_id, actor.first_name, actor.last_name, COUNT(*) as antal_filmer FROM actor inner JOIN film_actor ON actor.actor_id = film_actor.actor_id INNER JOIN film on film.film_id = film_actor.film_id GROUP BY actor.actor_id, first_name, last_name ORDER BY antal_filmer DESC;

Redigerat in [code]-taggar //mod
Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009

vad är det som inte fungerar då?

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Trädvy Permalänk
Medlem
Plats
Brunflo
Registrerad
Jul 2010

@Christley: Jag vill bara ha namnet på den som medverkat i flest filmer. Nu får jag en lista med alla skådespelare sorterat på flest filmer. Vill inte använda mig av top row eller limit.

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av downey:

@Christley: Jag vill bara ha namnet på den som medverkat i flest filmer. Nu får jag en lista med alla skådespelare sorterat på flest filmer. Vill inte använda mig av top row eller limit.

Av vilken anledning vill du inte använda någon funktion som är till för att göra det du vill ha gjort?

Skickades från m.sweclockers.com

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Brunflo
Registrerad
Jul 2010

@Zajin:

Vill hitta ett smartare sätt att lösa den på. Vet att jag skulle kunna söka ut och bara visa första raden.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009
Skrivet av downey:

@Zajin:

Vill hitta ett smartare sätt att lösa den på. Vet att jag skulle kunna söka ut och bara visa första raden.

limit är uppsatt just för detta. det är det smartaste viset.

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av downey:

@Christley: Jag vill bara ha namnet på den som medverkat i flest filmer. Nu får jag en lista med alla skådespelare sorterat på flest filmer. Vill inte använda mig av top row eller limit.

  • Gruppera inte på första_namn och andra_namn; det är helt meningslöst

  • Joina inte in tabeller du inte behöver: tabellen film i ditt exempel används inte till något.

  • Det kan finnas mer än en person som har medverkat i ett max antal filmer. Av denna anledning är faktiskt inte limit en särskilt bra lösning.

  • Ta fram din data steg för steg — eller select för select om du så vill — utan att krångla till det. För att räkna hur många gånger ett visst id har förekommit i filmer använder du:

select actor_id, count(*) as antal_filmer from film_actor group by actor_id

Med detta som en inre query är enkelt att hitta datan du letar efter

select a.actor_id, a.first_name, a.last_name, iq.antal_filmer from actor a inner join ( select actor_id, count(*) as antal_filmer from film_actor group by actor_id ) iq on iq.actor_id = a.actor_id where iq.antal_filmer = max(iq.antal_filmer)

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Brunflo
Registrerad
Jul 2010
Skrivet av Christley:

limit är uppsatt just för detta. det är det smartaste viset.

Fast Limit begränsar till en rad och om det är flera som har varit med i exakt samma antal filmer så får jag fel resultat.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009
Skrivet av downey:

Fast Limit begränsar till en rad och om det är flera som har varit med i exakt samma antal filmer så får jag fel resultat.

fast din fråga var "Bland annat vilken skådespelare som har varit med i flest filmer."
det är singular

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!