webForumDet fria alternativet

Bäst antal gånger.

Databaser & SQLur Databashanterare & SQL

2 svar · 215 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag skulle behöva ha lite hjälp med denna SQL, jag får inte ihop den.
Vad jag skulle vilja ha ut är,
Som bäst(alltså bästa placering)
Antal ggr(alltså hur många gånger har låten varit bäst)
Vilket område(Sverige Europa, Världen)
Jag har haft denna biten som grund:

SELECT   
MIN(t_placering.placering) AS Bast, 
Count(t_Placering.Placering) AS AntalPlac, t_Område.Område
FROM (t_Område INNER JOIN t_Placering 
ON (t_Område.omr_Id = t_Placering.omr_Id) AND
 (t_Område.omr_Id = t_Placering.omr_Id)) 
INNER JOIN t_SongTitlar ON t_Placering.ArrNo = t_SongTitlar.ArrNo 
WHERE   t_SongTitlar.songtitel = 'my friend' AND t_Placering.Placering <> 0 
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Område.Område 
ORDER BY Bast,AntalPlac  DESC

Jag får NÄSTAN fram rätt resultat, men jag har fel på hur han räknar. Jag ville ju få veta hur många gånger resp låt har varit bäst i resp område.
:OO

sawMedlem sedan mars 20011 880 inlägg
#2

Jag har kommit något längre, använt en annan SQL, men når ändå inte riktigt fram.

SELECT   t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering, 
Count(t_Placering.Placering) AS AntalGånger FROM t_Område 
INNER JOIN (t_Placering INNER JOIN t_SongTitlar 
ON t_Placering.ArrNo = t_SongTitlar.ArrNo) 
ON (t_Område.omr_Id = t_Placering.omr_Id) AND (t_Område.omr_Id = t_Placering.omr_Id) 
Where t_Placering.Placering <> 0 
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering 
HAVING (t_SongTitlar.songtitel='my friend'  ) 
ORDER BY  CASE t_Område.Område WHEN 'Sverige' THEN 1 WHEN 'Europa' THEN 2 ELSE 3 END, Min(t_Placering.Placering)

Vad som är felet är att jag ville bara ha top resultatet ifrån alla tre områdenna.
Som det nu är, så får jag alla resultaten.
:OO

sawMedlem sedan mars 20011 880 inlägg
#3

Jag har kommit ännu längre. I QA så får jag nu fram de resulta som jag vill ha, men de ligger "under varandra".
Någon föreslog UNION ALL, hur bör det användas?

(SELECT  top 1 t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering, 
Count(t_Placering.Placering) AS AntalGångerSV FROM t_Område
INNER JOIN (t_Placering INNER JOIN t_SongTitlar 
ON t_Placering.ArrNo = t_SongTitlar.ArrNo) 
ON (t_Område.omr_Id = t_Placering.omr_Id) AND (t_Område.omr_Id = t_Placering.omr_Id) 
Where t_Placering.Placering <> 0 AND t_Område.Område='sverige'
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering 
HAVING (t_SongTitlar.songtitel='my friend' )) 

(SELECT  top 1 t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering, 
Count(t_Placering.Placering) AS AntalGångerEU FROM t_Område
INNER JOIN (t_Placering INNER JOIN t_SongTitlar 
ON t_Placering.ArrNo = t_SongTitlar.ArrNo) 
ON (t_Område.omr_Id = t_Placering.omr_Id) AND (t_Område.omr_Id = t_Placering.omr_Id) 
Where t_Placering.Placering <> 0 AND t_Område.Område='europa'
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering 
HAVING (t_SongTitlar.songtitel='my friend' ))

(SELECT  top 1 t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering, 
Count(t_Placering.Placering) AS AntalGångerVrld FROM t_Område
INNER JOIN (t_Placering INNER JOIN t_SongTitlar 
ON t_Placering.ArrNo = t_SongTitlar.ArrNo) 
ON (t_Område.omr_Id = t_Placering.omr_Id) AND (t_Område.omr_Id = t_Placering.omr_Id) 
Where t_Placering.Placering <> 0 AND t_Område.Område='världen'
GROUP BY t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_Område.Område, t_Placering.Placering 
HAVING (t_SongTitlar.songtitel='my friend' ))

Är jag helt fel ute med all den här koden??

134 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)