Ich benutze mit Begeisterung Amarok, um meine Musiksammlung auf dem PC zu verwalten und anzuhören. Aber abgesehen von den Features, die das Programm schon liefert, kann man die darunterliegende Datenbank mit eigenen SQL Abfragen auswerten.
Hier ein schönes Beispiel, wenn man mal für ein Erscheinungsjahr alle seine Alben wissen will:
$ sqlite3 ~/.kde/share/apps/amarok/collection.db sqlite> SELECT DISTINCT artist.name, album.name, year.name, genre.name FROM tags LEFT JOIN year ON year.id = tags.year LEFT JOIN genre ON genre.id = tags.genre LEFT JOIN artist ON artist.id = tags.artist LEFT JOIN album ON album.id = tags.album WHERE year.name = '2009' ORDER BY artist.name, album.name;
Oder aber eine Liste aller Alben inkl. deren Länge:
sqlite> SELECT artist.name, album.name, SUM(tags.length)/60.0 FROM tags LEFT JOIN artist ON artist.id = tags.artist LEFT JOIN album ON album.id = tags.album group by artist.name, album.name ORDER by artist.name, album.name
Oder eine Liste aller Alben bei denen mindestens ein Song noch nie gespielt wurde:
sqlite> SELECT DISTINCT artist.name, album.name FROM tags LEFT JOIN album ON album.id=tags.album LEFT JOIN artist ON artist.id=tags.artist LEFT JOIN statistics ON statistics.url =tags.url AND statistics.deviceid = tags.deviceid where statistics.playcounter is null order by artist.name, album.name
Oder eine Liste aller Alben, von denen noch kein einziger Song gespielt wurde:
select DISTINCT artist.name, album.name from album JOIN tags ON album.id=tags.album JOIN artist ON artist.id=tags.artist WHERE not EXISTS ( select 1 from tags join statistics on statistics.url=tags.url and statistics.deviceid=tags.deviceid WHERE tags.album = album.id and statistics.playcounter >= 0 ) ORDER BY artist.name, album.name