商品表:goods
|
栏目表:category
|
建表完成后,作以下操作:
删除goods表的goods_desc 字段,及货号字段
并增加字段:click_count -- 点击量
在goods_name列上加唯一性索引
在shop_price列上加普通索引
在clcik_count列上加普通索引
删除click_count列上的索引
注
:以下查询基于ecshop网站的商品表(ecs_goods),
在练习时可以只取部分列,方便查看
|
goods_id --主键,
goods_name -- 商品名称
cat_id -- 栏目id
brand_id -- 品牌id
goods_sn -- 货号
goods_number -- 库存量
shop_price -- 价格
goods_desc --商品详细描述
|
cat_id --主键
cat_name -- 栏目名称
parent_id -- 栏目的父id
|
## 一种错误做法(用的count)
mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2;
#再多加些信息,加上赵六后错误暴露
mysql> insert into stu
-> values
-> ('赵六','A',100),
-> ('赵六','B',99),
-> ('赵六','C',98);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
#错误显现(为什么会筛选出分数大于60分的,我很好奇)
mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2;
##
正确思路(用的sum)
(1)
先查看每个人的平均成绩
mysql> select name,avg(score) from stu group by name;
(2)mysql> # 看每个人挂科情况
mysql> select name,score < 60 from stu;
(3)mysql> #计算每个人的挂科科目
mysql> select name,sum(score < 60) from stu group by name;
(4)#同时计算每人的平均分
mysql> select name,sum(score < 60),avg(score) as pj from stu group by name;
(5)#利用having筛选挂科2门以上的.
mysql> select name,sum(score < 60) as gk ,avg(score) as pj from stu group by name having gk >=2;
|
字段名称
|
字段类型
|
描述
|
matchID
|
int
|
主键
|
hostTeamID
|
int
|
主队的ID
|
guestTeamID
|
int
|
客队的ID
|
matchResult
|
varchar(20)
|
比赛结果,如(2:0)
|
matchTime
|
date
|
比赛开始时间
|
字段名称
|
字段类型
|
描述
|
teamID
|
int
|
主键
|
teamName
|
varchar(20)
|
队伍名称
|
参考答案:
mysql> select hid,t1.tname as hname ,mres,gid,t2.tname as gname,matime
-> from
-> m left join t as t1
-> on m.hid = t1.tid
-> left join t as t2
-> on m.gid = t2.tid;
|
mysql> # 合并 ,注意all的作用
mysql> select * from ta
-> union all
-> select * from tb;
要求查询出以下效果:
参考答案:
mysql> # sum,group求和
mysql> select id,sum(num) from (select * from ta union all select * from tb) as tmp group by id;
|