webForumDet fria alternativet

Räkna i SQL

11 svar · 598 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag har tänkt att bygga en statistik-sida.
Det jag har tänkt att använda är sångtitlar och hits.
Det jag skulle behöva hjälp med är först SQL:en.
Fälnamnen är
Arrno (kanske inte behövs ta med)
songtitel
hits (enbart hits > 0)
Jag har försökt i Access att skapa en fråga, men kan inte få fram någon som
räknar ihop summorna i hits.
Om jag sen inte mins alldeles fel, så för att få ut procenten, så skall man ta
hits /totalhits, eller är jag fel ute?
Om vi stannar så här så länge så vore jag tacksam för alla steg på vägen.

[REDIGERAT]

Jag har kommit en bit på vägen.
Min SQL ser nu ut så här:

SQL="SELECT  "&_
"(SELECT Sum(t_SongTitlar.Hits) FROM t_SongTitlar) AS 
Totalantal, Count(t_SongTitlar.songtitel) AS antal, t_SongTitlar.songtitel, 
t_SongTitlar.Hits "&_
"FROM  "&_
"t_SongTitlar "&_
"GROUP BY t_SongTitlar.songtitel, t_SongTitlar.Hits "&_
"HAVING t_SongTitlar.Hits>0 "&_
"ORDER BY t_SongTitlar.songtitel, t_SongTitlar.Hits;"

Då borde det väll bli:

summan = (RS("hits") / RS("Totalantal"))*100

Ser detta rätt ut?

BrimbaMedlem sedan dec. 19995 875 inlägg
#2

Läs gärna denna tråden.
http://www.webforum.nu/showthread.php?t=135903

Då blir det enklare att läsa ditt inlägg och du får troligen fler svar.

Du skriver att du har kommit en bit på vägen nu, vad är det som är fel i så fall? Är det något som inte fungerar?

sawMedlem sedan mars 20011 880 inlägg
#3

Nej allt fungerar, jag ville bara ha bekräfftat om jag är på rätt väg eller inte.
OBS
Det rör sig om en Access-databas.

TravoniMedlem sedan okt. 20041 556 inlägg
#4

Det finns en färdig sql-funktion för att räkna ut medel. AVG()
Kolla på den.

sawMedlem sedan mars 20011 880 inlägg
#5

Travoni, jag är inte intresserad av medel, utan procenten. Till detta kopplar jag en
bild (för att få breden), och därmed ett stapeldiagram.

Min fråga var, ser min SQL rätt ut, eller kan den göras bättre/snyggare osv.

BrimbaMedlem sedan dec. 19995 875 inlägg
#6

Om det fungerar och resultatet blir som du förväntar dig så borde du vara på rätt spår tycker jag.

Däremot begriper jag inte varför du grupperar på kolumnen hits. Jag antar att hits i detta fallet är antalet nedladdningar eller liknande? Det du vill är förmodligen något i stil med detta.

SELECT 
	(SELECT Sum(t_SongTitlar.Hits) FROM t_SongTitlar) AS Totalantal, 
	Count(t_SongTitlar.songtitel) AS antal, 
	t_SongTitlar.songtitel, 
	sum(t_SongTitlar.Hits) AS hits 
FROM 
	t_SongTitlar
GROUP BY 
	t_SongTitlar.songtitel
HAVING 
	t_SongTitlar.Hits > 0 
ORDER BY 
	t_SongTitlar.songtitel, sum(t_SongTitlar.Hits)
sawMedlem sedan mars 20011 880 inlägg
#7

Hej Brima, det ser nog bra ut, men en fråga, måste jag gruppera överhuvudtaget?
När det gäller hits, så uppdateras dessa genom att plusa på 1, är då gruppering nödvändig?

BrimbaMedlem sedan dec. 19995 875 inlägg
#8

Nej det behöver du in, såvida du inte råkar ha dubletter av songtitel, men det har du troligtvis inte så förmodligen kan du göra såhär:

SELECT 
	(SELECT Sum(t_SongTitlar.Hits) FROM t_SongTitlar) AS Totalantal, 
	t_SongTitlar.songtitel, 
	sum(t_SongTitlar.Hits) AS hits 
FROM 
	t_SongTitlar
WHERE
	t_SongTitlar.Hits > 0 
ORDER BY 
	t_SongTitlar.songtitel, sum(t_SongTitlar.Hits)
sawMedlem sedan mars 20011 880 inlägg
#9

Det ser ju väldigt snyggt ut, men när jag försöker att köra den, så får jag ett error:

Microsoft JET Database Engine (0x80040E21)
Du försökte köra en fråga med en mängdfunktion som inte innehöll det 
angivna uttrycket 'songtitel'.

Jag har svårt att förstå felmedelandet, för "t_SongTitlar.songtitel" ingår
ju i SQL:en.

BrimbaMedlem sedan dec. 19995 875 inlägg
#10

Det beror på att jag glömde ta bort mängdfunktionen sum() när jag skrev svaret. Ursäkta!

SELECT 
	(SELECT Sum(t_SongTitlar.Hits) FROM t_SongTitlar) AS Totalantal, 
	t_SongTitlar.songtitel, 
	t_SongTitlar.Hits
FROM 
	t_SongTitlar
WHERE
	t_SongTitlar.Hits > 0 
ORDER BY 
	t_SongTitlar.songtitel, t_SongTitlar.Hits
sawMedlem sedan mars 20011 880 inlägg
#11

Brima, du är helt kanon, och behöver inte als be om ursäkt.
Jag kom nu på att jag skulle behöva lägga till yterliggare en subquery, för att
lätt kunna hitta högsta resultatet och färja det.
Den subquery som jag ville lägga till är:

(SELECT Max(t_SongTitlar.Hits) AS HeightHits)

Då borde ju hela SQL:en se ut så här:

SELECT 
(SELECT Sum(t_SongTitlar.Hits) FROM t_SongTitlar) AS Totalantal, 
(SELECT Max(t_SongTitlar.Hits) AS HeightHits),t_SongTitlar.songtitel, 
t_SongTitlar.Hits 
FROM 
t_SongTitlar 
WHERE	
t_SongTitlar.Hits > 0  
ORDER BY 
t_SongTitlar.songtitel, t_SongTitlar.Hits

...men då får jag ett error:

Microsoft JET Database Engine (0x80040E14)
Syntaxfel. i frågeuttrycket '(SELECT Max(t_SongTitlar.Hits) AS HeightHits)'.

Krabbar jag till det för mycket nu?

sawMedlem sedan mars 20011 880 inlägg
#12

Jag såg felet

(SELECT Max(t_SongTitlar.Hits) FROM t_SongTitlar)AS HeightHits,

..tack för all di hjälp.

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