DROP TABLE IF EXISTS n_select;
CREATE TABLE n_select(
name varchar(10) NOT NULL default '',
count char(10) NOT NULL default '',
score_one FLOAT(3) NOT NULL default 0,
score_two FLOAT(3) NOT NULL default 0
)TYPE=MyISAM;INSERT INTO n_select values('aaa','3-17','0.7','0.9');
INSERT INTO n_select values('bbb','3-17','1.6','1.8');
INSERT INTO n_select values('ccc','3-17','2.7','2.4');
INSERT INTO n_select values('aaa','3-18','1.5','1.4');
INSERT INTO n_select values('bbb','3-18','2.1','2.3');
INSERT INTO n_select values('ccc','3-18','0.6','0.8');
INSERT INTO n_select values('aaa','3-19','2.5','2.9');
INSERT INTO n_select values('bbb','3-19','0.3','0.7');
INSERT INTO n_select values('ccc','3-19','1.2','1.1');SQL语句的目的:通过一次查询,以count='3-18'的用户中,(score_one+score_two)的和DESC排序,并且连带查出count='3-17'和count='3-19'的(score_one+score_two)的和,这三个和的别名按count=3-17,count=3-18和count=3-19分别叫score_1,score_2,score_3最后想得到这样的数据结果(以count='3-18'为准):name score_1 score_2 score_3
bbb 2.4 4.4 1.0
aaa 1.6 2.9 5.4
ccc 5.1 1.4 2.3解释:在count='3-18'中,(score_one+score_two)也就是score_2的值最高的为bbb,所以b排第一位,然后score_1和score_3分别是count='3-17'和count='3-19'的值,虽然这两个值都不是最高,但是只要count='3-18'的值最高,那么bbb就是最高
解决方案 »
- 数据库不兼容问题
- 如何实现日志循环储存?
- 急等!空间后台有google的AdSense广告时,mysql数据备份还原(恢复)软件功能失效
- 建表时 多表好 还是 复用表好?
- mysql 5.0 数据同步更新问题
- mysql-4.0.20a-win.zip
- 如何在VC中使用SQL
- 谁有EMS PostgreSQL Manager professional 1.3.1.1和crack?
- c#连接mysql模糊查询中文的问题
- MySQL两表(通过相同的班级和科目)对比查询不同的列
- mysql插入某个字段值包含特殊字符的有没有相关函数
- 开2个cmd窗口,同时insert相同的数据,但结果却有点不明白!!!
sum(case when count='3-18' then score_one+score_two end) as socre_2,
sum(case when count='3-19' then score_one+score_two end) as socre_3
from tb
group by name
可以解释下这个case when then的意思吗?
case when then已经了解了~
不过你这个好像并没有按进行order by啊?我试了下,bbb不是在第一位,它是按score_3排序的
sum(case when count='3-18' then score_one+score_two end) as score_2,
sum(case when count='3-19' then score_one_score_two end) as score_3
from n_select
group by name;
sum(if(count='3-17',score_one+score_two,0)) as socre_1,
sum(if(count='3-18',score_one+score_two,0)) as socre_2,
sum(if(count='3-19',score_one+score_two,0)) as socre_3
from n_select group by name
sum(case when count='3-18' then score_one+score_two end) as score_2,
sum(case when count='3-19' then score_one+score_two end) as score_3
from n_select group by name) as tt ORDER BY score_2 DESC