美文网首页
0906练习题

0906练习题

作者: 元宝2020 | 来源:发表于2020-09-06 13:29 被阅读0次

SQL部分

1、求拥有2辆及以上车的人每辆车的购车金额占个人总购车金额的比重
建表 CREATE TABLE car ( userid int, carid varchar(10), price decimal(6, 2), date date

答案:

select car.userid,carid,concat(round(price/sum_price*100,2),"%") as '占比'
from
car 
inner join
(SELECT userid, SUM(price) AS sum_price, COUNT(userid) AS cons
        FROM car
        GROUP BY userid) t
on car.userid=t.userid
where t.cons>=2
order by car.userid

这道题一开始想的太简单了,想着把ID分组后,筛选出记录大于等于2条的id,然后用相应的金额除以总计求和就OK了。

但是执行下来求出的是每个ID的购车金额占全部price字段占比,不满足要求;加上carid之后,发现对ID+carid分组,然后求金额占比都是100%。。。

整体了一下思路,先求了每个ID的总计购车金额,已经拥有车辆数量,将这个表作为临时表。然后和原表内连接,再去限定车辆数量,求一个每个ID的内部购车金额占比。
终于OK了

2、求年累加值,总累加值
建表 CREATE TABLE temp ( DATE DATETIME, VALUE INT );

答案:

select b.year,b.month,
    @year_sum := IF(@year = YEAR, @year_sum + VALUE1, VALUE1) AS YSUM, 
    @year := YEAR,
    @cum_sum := @cum_sum + value1 AS cumsum
from 
(select 
       year(date) as YEAR,
       month(date) as MONTH,
        sum(value) as value1
from temp 
group by year(date),month(date)
)b,(SELECT @YEAR:= 0,@year_sum:= 0,@cum_sum:= 0) a

cumsum为null 不知道哪里有问题。。。
ps:已经订正,赋值要用:=,就可以跑通了

3、列转行
建表 CREATE TABLE st_score ( userid varchar(20) NOT NULL COMMENT '用户ID', subject varchar(20) COMMENT '科目', score int(4) COMMENT '成绩' )

答案:

select userid,
          case when subject = "语文" then score else 0 end as '语文 ',
          case when subject = "数学"  then score else 0 end as '数学 ',
          case when subject = "英语" then score else 0 end as '英语 ',
          case when subject = "政治" then score else 0 end as '政治 '
from st_score

4、行转列
建表 CREATE TABLE st_score1 ( userid VARCHAR ( 20 ) NOT NULL COMMENT '用户id',
cn_score DOUBLE COMMENT '语文成绩', math_score DOUBLE COMMENT '数学成绩', en_score DOUBLE COMMENT '英语成绩', po_score DOUBLE COMMENT '政治成绩' )

答案:

select userid, '语文' COURSE , CN_SCORE as SCORE from st_score1  
union 
select userid, '数学' COURSE, MATH_SCORE as SCORE from st_score1   
union 
select userid, '英语' COURSE, EN_SCORE as SCORE from st_score1   
union
select userid, '政治' COURSE, PO_SCORE as SCORE from st_score1   
order by  course desc,userid

5、计算各院系的男女计数以及合计
建表 CREATE TABLE st ( id VARCHAR(20), NAME VARCHAR(20), gender CHAR(1), birth VARCHAR(20), department VARCHAR(20), address VARCHAR(20) )

答案

select department,
          sum(case  when gender='男' then 1 else 0 end ) as '男',
          sum(case  when gender='女' then 1 else 0 end ) as '女',
          count(*) as '合计'
from st
group by department

Python部分

1、什么是PEP8规范?

PEP(Python Enhancement Proposals) 文档中的第八篇专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8,规定了如缩进、换行、空格、注释等代码格式
https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/

2、Python都有那些自带的数据结构?

列表,元组,字典,集合

共同点:都是可迭代对象

不同点:列表,字典是可变的
元组,集合不可变

3、Python中的负索引是什么?

Python中的序列是可以采用负数的索引来访问的,其范围是 -1 到序列的负长度,也就是负索引以序列的结束为起点。
list[2,3,4,5,68,0]
list[-1]=0

4、怎么对列表进行去重操作?
list1=[2,1,2,4,5,6,10,3,3,3,7]

pd.unique(list1)
array([ 2, 1, 4, 5, 6, 10, 3, 7])

5、pandas的axis参数怎么理解?
axis是轴,传入axis参数可以指定在哪个轴上操作,用于获取列表的行和列

  1. axis=0 或者 "index":
    如果是单行操作,就指的是某一行
    如果是聚合操作,指的是跨行cross rows

  2. axis=1 或者"columns"
    如果是单列操作,就指的是某一列
    如果是聚合操作,指的是跨列cross columns

官方解释axes.png
image.png

相关文章

  • 0906练习题

    SQL部分 1、求拥有2辆及以上车的人每辆车的购车金额占个人总购车金额的比重建表 CREATE TABLE car...

  • 重口味笑话500则

    0906 儿子就像皮夹克,看着拉风,其实一点也不实用。 0906 跟着中国大妈走,轮滑场地任你游 0906 我家的...

  • MySQL中tinytext、text、mediumtext和l

    http://www.360sdn.com/mysql/2013/0906/845.html

  • 0906

    呃呃呃呃,一万矢量化完成,2000的房子真的难测。 每次一定一定要注意等高线的值。 摇线的时候,质量和速度思考一下...

  • 0906

    学到两个字,焦躁。世上本无事

  • 0906……

    昏沉沉的过了一天,不知是越长大越孤单,还是越来越没有底气和能量似的,放假回来后,累觉还累。

  • 0906

    感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...

  • 0906

    过了12.00还是放到6号吧。 其实说的没有错,我从始到终并没有真正得到你我始终害怕失去你,高中的时候其实最明显了...

  • 0906

    早上好!#幸福实修#~每天进步1%#幸福实修11班@吕敏一富阳 20170906(0930) 【幸福三朵玫瑰】 昨...

  • 0906

    昨天你吓我说要改期,今天筷子又要一起来。 我脑筋疯狂转动,我就怕又改期你知道吗~ 9.9一百天你知道吗! 昨晚听闻...

网友评论

      本文标题:0906练习题

      本文链接:https://www.haomeiwen.com/subject/tbxcektx.html