大概数据如下目前
主表A
主表主键 学生编码
aid code
1 小明
2 小红
2 小忆子表1-B
子表主键 主表主键
bid aid 科目 分数
1 1 数学 100
2 1 语文 99
3 1 英语 77
4 2 数学 66
5 2 语文 77
6 2 英语 33
子表2-C
子表主键 主表主键
cid aid 补课类型 次数
1 1 补数学课 5
2 1 补语文 5
3 1 补英语 4
4 2 补数学课 2
5 2 补语文 1
6 2 补英语 3
最终我想展示的是
学生 数学 数学补课次数
小明 100 5
小红 66 2这样的数据 然后我使用的是主子查询。 发现数据好慢。谁有更好的优化查询速度的方法?select
A.code as 学生,
(select B.分数 from B where B.aid = A.aid and B.科目='数学') as 数学,
(select C.次数 from C where C.aid = A.aid and C.补课类型='补数学课') as 数学补课次数,
from A这么发现数据的确是对的。但是速度实在太慢了.. 谁有快速的一些的方法?
主表A
主表主键 学生编码
aid code
1 小明
2 小红
2 小忆子表1-B
子表主键 主表主键
bid aid 科目 分数
1 1 数学 100
2 1 语文 99
3 1 英语 77
4 2 数学 66
5 2 语文 77
6 2 英语 33
子表2-C
子表主键 主表主键
cid aid 补课类型 次数
1 1 补数学课 5
2 1 补语文 5
3 1 补英语 4
4 2 补数学课 2
5 2 补语文 1
6 2 补英语 3
最终我想展示的是
学生 数学 数学补课次数
小明 100 5
小红 66 2这样的数据 然后我使用的是主子查询。 发现数据好慢。谁有更好的优化查询速度的方法?select
A.code as 学生,
(select B.分数 from B where B.aid = A.aid and B.科目='数学') as 数学,
(select C.次数 from C where C.aid = A.aid and C.补课类型='补数学课') as 数学补课次数,
from A这么发现数据的确是对的。但是速度实在太慢了.. 谁有快速的一些的方法?
解决方案 »
- 关于bcp出操作字符的问题,请各位帮帮忙
- mysqld-nt.exe,版本 0.0.0.0,错误模块 mysqld-nt.exe
- 用SQL Server 2000 的查询分析器创建时,下面代码有错误,但找不出来,请指教
- 有关日期判断查询表的问题
- 用codeblocks连接mysql问题
- Sql(MySql )语句有个地方不知道怎么实现 请教大虾
- mysql -h 192.9.100.50 -u root -p 为什么不能登录mysql????
- 我这里上网不方便,所以请教 MySql 和 PostgreSql 的连接写法。
- MYSQL里如何设置密码?
- 如何将这三个查询语句合并为一个查询?
- mysql为列设置默认值疑问
- 请教MySQL中显示宽度指示器的用途
create index x2 on C(aid,补课类型);
行头1 0 0 0
行头2 0 0 0数据库表中数据形式:
Corp name sex
监狱1 人1 男
监狱2 人2 女
监狱3 人3 未知
…
解决办法:行转列
select corp ,
SUM(CASE WHEN xb = '男' then 1 else 0 end ) as 'male',
SUM(CASE WHEN xb = '女' then 1 else 0 end ) as 'female',
SUM(CASE WHEN xb = '未知' then 1 else 0 end ) as 'unknown'
FROM XXX
GROUP BY corp;这个能帮到你吗?
SUM(CASE WHEN 科目id = '001' then 分数 else 0 end ) as '数学',
SUM(CASE WHEN 补课类型id = '101' then 次数 else 0 end ) as '数学补课册数',SUM(CASE WHEN 科目id = '002' then 分数 else 0 end ) as '语文',
SUM(CASE WHEN 补课类型id = '102' then 次数 else 0 end ) as '语文补课册数',....FROM
学生表,成绩表,补课表where
id条件关联GROUP BY 学生id;