美文网首页
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练习题

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