"Yuzem" <naujnit...@gmail.com> wrote in message news:22153722.p...@talk.nabble.com > Suppose that have 2 columns: folders and tags: > ~/Music|classic,rock > ~/Music|classic,rock > ~/Pictures|art,photos > ~/Pictures|art,photos > ~/Pictures|art,photos > > To know the folder count I do: > sqlite3 test.db "select folder, count(folders) from t1 group by > folder" > > Returns: > ~/Music|2 > ~/Pictures|3 > > How can I do the same for tags using only sqlite to get this: > art|3 > classic|2 > photos|3 > rock|2
Consider normalizing your database. Split into two tables - folders and tags - with a one-to-many relationship between them. Then the solution would be trivial. If you insist on keeping the database as is: select tag, count(*) from (select replace(rtrim(tags,'abcdefghijklmnopqrstuvwxyz'),',','') as tag from t1 union select replace(ltrim(tags,'abcdefghijklmnopqrstuvwxyz'),',','') as tag from t1) as alltags join t1 on t1.tags like '%' || tag || '%' group by tag; This monstrosity gives the correct answer in your specific example, but it relies on there being exactly two tags per folder. > Another question, is there any way to get max count for all grouped > columns in one single consult? > It should return something like this: > 2|4 > > Meaning that the first column has 2 unique values (~/Music and > ~/Pictures) and the second column has 4 (art, classic. photos and > rock) The second column doesn't have 4 unique values - it has two: 'classic,rock' and 'art,photos'. A comma in the middle of a field value has no special meaning in SQL - it doesn't magically turn one value into two. Anyway: select (select count(*) from (select distinct folder from t1)), (select count(*) from ( select replace(rtrim(tags,'abcdefghijklmnopqrstuvwxyz'),',','') from t1 union select replace(ltrim(tags,'abcdefghijklmnopqrstuvwxyz'),',','') from t1)); Same caveat applies. Igor Tandetnik _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users