Jag har en databas (Access) med en bl.a. en kolumn "Namn". Jag vill räkna hur många gånger resp. namn förekommer. Vill även sortera efter hur många ggr namnet förekommer. Är inne på: Prova: SQL="SELECT COUNT(Namn) AS Antal, Namn FROM Tabell GROUP BY Namn ORDER BY COUNT(Namn)" Johan, rekomendera dig att läsa artikeln: Sorry Andreas, lite mycket klipp och klistra... Men du kan få komma hem till mig och läsa igenom alla mina projekt så kommer du inte finna ett enda COUNT(något_annat_än_*) ;-) Och ja, jag har läst artikeln, fast det var ju ett tag sedan... Du fick mig ju när det gällde AVG() funktionen. Ibland tänker man inte på allt. Då är det tur att du finns. ;o) Jag får inte till del två i mitt försök. Meningen är att ha en tabell där olika namn läggs till i en tabell vid vissa datum. Samma namn och datum kan förekomma flera gånger. I min tabell har jag: ÄR det nåt sånt här du menar? Känner mig lite besvärlig men nu är det nya bud. Som ni säkert har förstått så ska det bli en typ av omröstning (till en idrottsförening). Efter varje match röstar man på "matchens lirare". Namn (Player) och matchdatum (GameDate) läggs till i en databas. Första SQL-frågan: Detta är inte helt enkelt... Jag har nu pillat med detta i 30 minuter och hoppas att det blir riktigt (mina tester i Access verkar stämma iaf...). Det finns säkert effektivare lösningar, hoppas att någon kan rätta mig. Tackar för att ni tar er tid. Ska testa det när jag får någon lucka i det vanliga kneget... JohanD, ditt förslag listade ungefär samma sak som Andreas. D.v.s. Samma datum på flera rader. Jag har vänt och vridit på detta men kört fast totalt. Får du flera namn på alla dagar eller bara de där flera spelare har lika många röster? Jag funderar vidare på den nya strukturen... Med den nya designen borde denna satsen fungera, den tar fram spelaren med flest röster för varje datum, om några har samma listas båda. Visst funkar det! Då kommer frågan hur man kan summera alla "Votes" för resp. namn och presentera t.ex. en top 3 på totalt antal "Votes" över alla datum. Enligt strukturen ovan skulle det se ut typ: >Dessutom har det gått åt en IR-mus och ett trådlöst tangentbord när tålamodet tryter... ;) Stort tack, funkar finfint! Nu ska jag bygga lite på databasen innan det blir kudden. Tänkte inte lägga en natt till vid datorn, men...Räkna och gruppera efter namn och datum med SQL
SQL="SELECT COUNT(Namn) AS Antal FROM Tabell GROUP BY Namn"
Kan inte provköra där jag sitter just nu men är jag inne på rätt spår?
Jag vill även kunna gruppera namnen efter en datumkolumn i databasen. Hur får jag in ytterligare en gruppering, typ:
SQL="SELECT COUNT(Namn) AS Antal_dag FROM Tabell GROUP BY Namn AND Date" eller?
Någon som ser något direkt generalfel?Sv: Räkna och gruppera efter namn och datum med SQL
SQL="SELECT COUNT(Namn) AS Antal, Namn FROM Tabell GROUP BY Namn ORDER BY Antal"Sv: Räkna och gruppera efter namn och datum med SQL
SQL="SELECT Namn, Date, COUNT(Namn) AS Antal_dag FROM Tabell GROUP BY Namn, Date"
/JohanSv: Räkna och gruppera efter namn och datum med SQL
http://www.pellesoft.nu/login/articles/databas/count_prestanda.asp
Går lika bra om inte bättre med COUNT(*)Sv: Räkna och gruppera efter namn och datum med SQL
/JohanSv: Räkna och gruppera efter namn och datum med SQL
Sv: Räkna och gruppera efter namn och datum med SQL
ID|GameDate|Player
strSQL="SELECT COUNT(Player) AS Antal, Player FROM Votes GROUP BY Player ORDER BY COUNT(Player) DESC"
Detta sorterar ut så jag kan loopa ut hur många ggr ett namn förekommer totalt, t.ex.:
Player - Antal
Namn1 - 11 ggr
Namn2 - 9 ggr
Namn 12 - 7 ggr o.s.v.
Hur modifierar jag ovanstående för att blanda in datumkolumnen typ:
GameDate - Namn - Antal
2002-09-25 - Namn1 - 4 ggr
2002-09-25 - Namn2 - 3 ggr
2002-09-28 - Namn1 - 5 ggr
2002-09-28 - Namn12 - 6 ggr o.s.v.
Har försökt på längden och tvären utan att lyckas...Sv: Räkna och gruppera efter namn och datum med SQL
SQL="SELECT GameDate, Player, COUNT(*) AS Antal FROM Votes GROUP BY GameDate, Player"Sv: Räkna och gruppera efter namn och datum med SQL
SQL="SELECT COUNT(Namn) AS Antal, Namn FROM Tabell GROUP BY Namn ORDER BY COUNT(Namn)" hämtar ut namet samt hur många ggr namnet har förekommit i databasen d.v.s. det totala antalet röster. Detta funkar helt OK.
Fråga två (Anders H:s förslag) visar datum, namn samt antal ggr det har förekommit/matchdag. Nu vill jag bara visa det namnet som har förekommit flest ggr/matchdag, typ:
GameDate - Namn - ggr
2002-09-25 - Namn1 - 4 ggr
2002-09-28 - Namn2 - 6 ggr
2002-09-30 - Namn14 - 9 ggr
Alltså, bara en rad per datum, och visa den spelare som har förekommit flest ggr under det datumet.
Satt stora delar av natten utan att få till det. Nu måste jag göra lite "vanligt" jobb också, och första matchen är i kväll, puhhh...Sv: Räkna och gruppera efter namn och datum med SQL
SELECT a.GameDate, a.Player, First(a.Antal) AS FörstaförAntal
FROM [SELECT GameDate, COUNT(*) AS Antal FROM Votes GROUP BY GameDate, Player]. AS b LEFT JOIN [SELECT GameDate, Player, COUNT(*) AS Antal FROM Votes GROUP BY GameDate, Player]. AS a ON (b.Antal = a.Antal) AND (b.GameDate = a.GameDate)
GROUP BY a.GameDate, a.Player
/JohanSv: Räkna och gruppera efter namn och datum med SQL
Sv: Räkna och gruppera efter namn och datum med SQL
Har nu provat ett annat upplägg på tabellen enligt:
GameDate - Player - Votes
2002-09-25 - Namn1 - 11
2002-09-25 - Namn2 - 7
2002-09-25 - Namn3 - 1
2002-09-27 - Namn1 - 2
2002-09-27 - Namn2 - 4
2002-09-27 - Namn3 - 0
Alltså när en röst faller på ett namn vid ett visst datum så adderas det i "Votes" kolumnen.
Att hämta upp och loopa ut allt med:
strSQL="SELECT GameDate, Player, Votes FROM vote" går bra men hur f-n funkar det med gruppering??
Har försökt med:
strSQL="SELECT GameDate, Player, Votes FROM vote GROUP BY GameDate" eller GROUP BY Player m.m. men oftast får jag:
"Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'GameDate'."
Jag vill alltså sortera ut dels det namnet som har flest "Votes" varje datum, och dels flest "Votes" totalt och presentera detta enligt:
2002-09-25 Namn1 11
2002-09-27 Namn2 4
Totalt: Namn1 13
Några tips på hur jag ska lägga upp det? Jag har nog läst ett par hundra inlägg i forumet om gruppering men det verkar inte som något vill funka...Sv: Räkna och gruppera efter namn och datum med SQL
/JohanSv: Räkna och gruppera efter namn och datum med SQL
SELECT A.GameDate, A.MaxVotes, B.Player
FROM
(SELECT Votes.GameDate, Max(Votes.Votes) AS MaxVotes FROM Votes GROUP BY Votes.GameDate) A
INNER JOIN
(SELECT * FROM Votes) B
ON A.GameDate = B.GameDate AND A.MaxVotes = B.Votes
ORDER By A.GameDate
/JohanSv: Räkna och gruppera efter namn och datum med SQL
Totalt
Namn1 - 13 '11+2
Namn2 - 11 '7+4
Namn3 - 1 '1+0
En annan fråga: Gör du dessa satser direkt i Access eller var lär man sig detta. Har letat på nätet som en tokig men hittar inte särskilt mycket. Framför allt inte på svenska. Det känns lite frustrerande att sitta natt efter natt utan att komma någonsatans. Dessutom har det gått åt en IR-mus och ett trådlöst tangentbord när tålamodet tryter... ;)Sv: Räkna och gruppera efter namn och datum med SQL
Hehe =)
>Gör du dessa satser direkt i Access eller var lär man sig detta.
Från början gjorde jag det i Access-editorn, men man lär sig med tiden, nu skriver jag nästan allt "för hand" (därför blir det fel ibland).
De tre med flest röster totalt:
SELECT TOP 3 Player, SUM(Votes) AS VotesSum FROM Votes GROUP BY Player ORDER BY SUM(Votes) DESC
/JohanSv: Räkna och gruppera efter namn och datum med SQL