jun 062010
 

Flattr this!

Ibland kan det vara intressant att få fram lite statistik från en databas, kanske räkna summan av flera poster, göra uträkningar av olika slag. I mitt exempel utgår jag från exemplet med filmdatabasen som jag visade här.

Jag vill räkna hur många olika genrer varje film har.

Ett formulär är inte nödvändigt för denna uppgift men kan underlätta för att knappa in uppgifter i databasen. I så fall kan denna också behövas.

Jag valde att knappa in en hel del data i min filmdatabas för att få lite utslag:

Dessutom med genre som passar dessa filmer:

I filmen Den gode, den onde, den fule som bilden ovan visar valde jag att sätta tre olika genrer på för att få lite bättre resultat i slutändan.

När allting är klart så vill vi räkna ut hur många genrer varje film har.

I huvudfönstret väljer vi ”Sökningar” till vänster och sen ”Skapa sökning i SQL-vy”.

Där skriver vi in följande:

eller klistra in följande:

SELECT ”Filmtabell”.”Filmnamn”, COUNT(”Genretabell”.”Genre”) FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”
WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”
GROUP BY ”Filmtabell”.”Filmnamn”

och när vi väljer kör så får vi detta resultat:

I resultatet så har vi först Die Hard där det står en 2:a, alltså action och komedi. En 3:a på den gode, den onde, den fule som står för västern, komedi och action, alltså 3 stycken.

Här är förklaringen till vårt sql-kommando:

SELECT ”Filmtabell”.”Filmnamn”,

Vi vill få fram filmnamnen i sökningen och som ni kan notera så har jag tabellnamn.fältnamn. Detta är ett måste då vi rotar i flera tabeller i samma fråga. Två tabeller kan nämligen ha fältnamn som är samma och detta skiljer dessa åt.

COUNT(”Genretabell”.”Genre”)

Vi vill ha en uträkning baserat på fältet genrer i tabellen Genretabell.

FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”

Tabellerna som används i frågan deklareras. I detta fallet är det samtliga tre som används.

WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”

Vi kopplar Filmgenre med respektive i Filmtabell och Genretabell. Detta måste göras för att kunna utnyttja alla tabeller.

GROUP BY ”Filmtabell”.”Filmnamn”

Eftersom vi håller på med en gruppfunktion så behövs GROUP BY.

Nu vill vi ha listan sorterad. Jag skulle vilja ha listan sorterad på detta viset:

alltså med högsta numret överst och sen fallande. Som jag visade i sql-skolan del 1 så kan man köra med ORDER BY Filmtabell.Filmnamn om man vill ha listan sorterad efter film. Det är bara att skriva denna rad under GROUP BY-raden.

Nu vill vi att uträkningen ska sorteras och då är det COUNT(”Genretabell”.”Genre”). Detta går inte genom att skriva ORDER BY COUNT(”Genretabell”.”Genre”) utan vi måste fixa ett alias.

COUNT(”Genretabell”.”Genre”) AS räkna

Nu motsvarar ”räkna” hela den långa raden. Därefter är det bara att skriva detta under GROUP BY-raden:

ORDER BY räkna DESC

Desc för att vi vill ha fallande sortering.

Därför blir den kompletta frågan så här:

SELECT ”Filmtabell”.”Filmnamn”, COUNT(”Genretabell”.”Genre”) AS räkna FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”
WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”
GROUP BY ”Filmtabell”.”Filmnamn”
ORDER BY räkna DESC

Jag kommer att fortsätta med statistik i senare bloggar. I denna har jag valt COUNT (räkna) men det finns även summa, medelvärde och annat smått och gott.

jun 032010
 

Flattr this!

Under sista veckan har jag testat ett program med det osannolika namnet Kabikaboo. Jag vet inte riktigt hur jag ska klassificera det eller beskriva det. I grunden är det ett stödprogram för författare. Man kan hålla ordning på handling, karaktärer och platser man använder i en text. Framför allt rör detta skönlitterära texter. Man gör det i trådade anteckningar. Man kan fritt lägga till och ta bort anteckningar och bygga avancerade träd med relationer som stöd för intrig och handling. Anteckningarna syns i flikar. Parallellt med detta arbetar man på texten i en hyfsat bra ordbehandlare. Det finns svensk rättstavning och en del andra funktioner. Detta trots att programmet inte är översatt till svenska. Kabikaboo kan inte mäta sig med Writer eller andra tunga ordbehandlingsprogram, men har tillräckligt med verktyg för enkel ordbehandling. Avsikten är att man ska skriva sin text med hjälp av stödfunktionerna. Formatera och putsa texten gör man efteråt i andra program.

På startskärmen är det uppenbart att Kabikaboo är avsett för författare. Tänk vad Shakespeare hade kunnat göra med Kabikaboo...

Man kan dock använda Kabikaboo som ett rent anteckningsprogram eller som stöd för projektplanering. De trådade anteckningarna kommer väl till pass. Jag brukar anteckna massor med citat från böcker, artiklar och arkivhandlingar i anteckningsprogram som Tomboy eller Zotero. Kabikaboo är minst lika bra för att hålla reda på anteckningar. Trådvyn gör det möjligt att samla anteckningar på ett smart och överskådligt sätt. Man kan bygga upp sina noteringar i ett forskningsprojekt nästan på samma sätt som en skönlitterär författare håller reda på sina strukturer.

Så här använder jag Kabikaboo. Jag för in uppgifter från arkivhandlingar jag arbetar med inför en artikel. Med Kabikaboo kan jag koppla samman anteckningarna och strukturera arbetet

Kabikaboo är ett udda verktyg som är roligt att arbeta med. Det har en säregen och anpassningsbar struktur som gör det användbart för många områden. Det finns för Linux och Windows. I Linux bör man i första hand installera från sin pakethanterare. Om inte Kabikaboo finns där kan man ladda ner lämpligt paket från projektets hemsida. För Windows laddar man ner och installerar från hemsidan.

Ett tips om man börjar använda Kabikaboo är att se till att man bockar för Autosave (spara automatiskt) och/eller Save on exit (spara vid avslut) på menyn File (Arkiv). Annars måste man se till att spara sina anteckningar manuellt. Det är lät att glömma. Särskilt som andra anteckningsprogram som Tomboy och Zotero har funktionen som standard. Jag gjorde själv det misstaget och förlorade flera anteckningar.

Läs mer här!

jun 012010
 

Flattr this!

Jag har skrivit om hur man kan lägga till egna förkortningar som automatiskt korrigeras till ord av OpenOffice Writer här. Det går att bygga på funktionen minst ett steg till.

Antag att du ofta använder specialtecken. Du kommer åt dessa under Infoga – Specialtecken…

Antag att du vill ha en bock från typsnittet Opensymbol.

Med Infoga - specialtecken kan du mata in speciella tecken manuellt. Du kan välja mellan alla installerade typsnitt. OpenSymbol innehåller många användbara symboler.

Det tar tid att bläddra fram. Ett sätt är att använda sig av tangentbordsgenvägen u 531 (I Ubuntu Linux: CTRL+SHIFT+u e531. Kombinationen är förmodligen något annorlunda i Windows.). En sådan genväg kommer i alla fall inte jag ihåg. Därför har jag lagt in bocken i autokorrigering.

Gör så här:

Skriv in en bock från Opensymbol i ett dokument.

Markera bocken och välj CTRL+M. Det tar bort direktformatering. Det vill säga att när du fortsätter skriva efter bocken blir texten i din vanliga styckeformatmall, inte i teckensnittet OpenSymbol.

Kopiera bocken (markera och CTRL+C).

Gå in under Verktyg – Alternativ för autokorrigering, fliken Ersätt. Skriv in en lämplig förkortning i fältet Ersätt och klistra in bocken i fältet med. Jag väljer i exemplet förkortningen bck. När du sedan skriver förkortningen ersätts den med en bock så fort du gör ett blanksteg efter bck.

Blir…

Naturligtvis kan du använda tecken från andra typsnitt, Wingdings och symboler på samma sätt. Kom ihåg att om att om du sänder dokumentet och mottagaren inte har typsnittet installerat kommer inte symbolerna fram.

OpenSymbol följer med OpenOffice som ett av flera fria typsnitt vid installation. Om någon inte ser de symboler du lagt in, på grund av att typsnittet inte är installerat, är det ett bra argument för att övertala henne/honom att installera OpenOffice!