mysql - Specific query to get scores as a set of qualification rates using averages -
please note there's select i've made below code
i've created sql fiddle don't have recreate example in local db. http://sqlfiddle.com/#!9/4c657
the problem instead of getting rates numbers should them percentages, such as:
bad : 25%, 10%,verygood: 30%: excellent:45%
currently i'm showing numbers, i'm not sure if should use select (select ...) group or if there's better way it. i'm in doubt i'd have suggestions. thanks!
thanks
/*what i've got far*/ select qg.name questiongroup,q.name question,(rate=1) bad ,(rate=2) regular,(rate=3) good, (rate=4) verygood, (rate=5) excellent answers inner join questions q on q.id=a.questionid inner join questiongroups qg on qg.id = q.groupid; create table `guidedvisits` ( `id` int(10) unsigned not null auto_increment, `date` date not null, primary key (`id`) ) engine=innodb auto_increment=3 default charset=utf8; create table `questiongroups` ( `id` int(10) unsigned not null auto_increment, `name` varchar(20) default null, primary key (`id`) ) engine=innodb auto_increment=3 default charset=utf8; create table `questions` ( `id` int(10) unsigned not null auto_increment, `groupid` int(10) unsigned not null, `name` varchar(120) not null, primary key (`id`), key `idx_groupid` (`groupid`) ) engine=innodb auto_increment=5 default charset=utf8; create table `answers` ( `id` int(10) unsigned not null auto_increment, `visitid` int(10) unsigned not null, `questionid` int(10) unsigned not null, `rate` tinyint(4) not null, primary key (`id`), key `idx_questionid` (`questionid`), key `idx_visitid` (`visitid`) ) engine=innodb auto_increment=9 default charset=utf8; insert `questiongroups` values (1,'about us'),(2,'facility'); insert `questions` values (1,1,'did us?'),(2,1,'what think our ads?'),(3,2,'were our reception chairs comfortable?'),(4,2,'was clean expect?'); insert `guidedvisits` values (1,'2015-03-31'),(2,'2015-03-31'); insert `answers` values (1,1,1,3),(2,1,2,4),(3,1,3,4),(4,1,4,5),(5,1,1,5),(6,1,2,5),(7,1,3,5),(8,1,4,5);
select qg.name questiongroup,q.name question, case when avg(rate) < 25 'bad' when avg(rate) < 35 'good' .. end ratedesc answers inner join questions q on q.id=a.questionid inner join questiongroups qg on qg.id = q.groupid group qg.name, q.name
Comments
Post a Comment