• SQL題目收集


    題 1:

    表结构如下
    MyTable:
    ID      quantity
    1        3.3333
    2         4.2222
    3         1.5555
    4         9.8888
    5 ………

    要求用SQL语句生成如下查询
    ID           quantity   quantity
    1             3.3333     3.3333
    2             4.2222     7.5555
    3             1.5555     9.0000
    4             9.8888     18.8888
    5 ………
    提示:2日累计日产=1日累计日产+2日累计日产
    3日累计日产=2日累计日产+3日累计日产




    答案:
    select id,quantity,(select sum(quantity)from mytable where id<=t.id) as acount from mytable t

    題 2:

    表A:
    字段: id(主键) list
    1 国内
    2 国外
    3 国内
    4 国外
    5 国外
    6 国内
    7 国外
    8 国内
    9 国内
    10 国内
    11 国外
    能不能现实成:
    字段: id list
    1 国内
    3 国内
    6 国内
    2 国外
    4 国外
    5 国外
    反正意思就上把国内和国外区分显示, 先显示国内的在显示国外的,
    然后每页分别显示3个国内和国外的

    --建立测试环境
    create table tb(id 
    int,list varchar(10))
    insert tb(id,list)
    select 
    '1','国内' union all
    select 
    '2','国外' union all
    select 
    '3','国内' union all
    select 
    '4','国外' union all
    select 
    '5','国外' union all
    select 
    '6','国内' union all
    select 
    '7','国外' union all
    select 
    '8','国内' union all
    select 
    '9','国内' union all
    select 
    '10','国内' union all
    select 
    '11','国外'
    go

    --分页定义表
    CREATE TABLE tb_Page(
    list varchar(
    10) PRIMARY KEY, --类别名称,与tb表的list关联
    Records 
    int--每页显示的记录数
    Orders 
    int--在页中的显示顺序
    INSERT tb_Page SELECT 
    '国内',3,1
    UNION ALL SELECT 
    '国外',3,2

    GO

    --实现分页处理的存储过程
    CREATE PROC p_PageView
    @PageCurrent 
    int=1 --要显示的当前页码
    AS
    SET NOCOUNT ON
    --得到每页的记录数
    DECLARE @PageSize 
    int
    SELECT @PageSize
    =SUM(Records) FROM tb_Page
    IF ISNULL(@PageSize,
    0)<0 RETURN

    --分页显示处理
    SET @PageCurrent
    =@PageCurrent*@PageSize
    SET ROWCOUNT @PageCurrent
    SELECT SID
    =IDENTITY(int,1,1),ID
    INTO # FROM(
    SELECT TOP 
    100 PERCENT a.ID
    FROM tb a
    LEFT JOIN tb_Page b ON a.list
    =b.list
    ORDER BY CASE WHEN b.list IS NULL THEN 
    1 ELSE 0 END,--分类没有定义的显示在最后
    ((SELECT COUNT(
    *) FROM tb
    WHERE list
    =a.list
    AND (id
    <a.id OR id=a.id AND id<=a.id))-1)
    /b.Records,
    b.Orders,a.ID )a
    IF @PageCurrent
    >@PageSize
    BEGIN
    SET @PageCurrent
    =@PageCurrent-@PageSize
    SET ROWCOUNT @PageCurrent
    DELETE FROM #
    END
    SELECT a.
    * FROM tb a,# b
    WHERE a.ID
    =b.ID
    ORDER BY b.SID
    GO

    --调用
    EXEC p_PageView 
    1
    go
    --删除测试环境
    drop table tb ,tb_page
    drop proc p_PageView
    go

    /*--测试结果
    id list
    ----------- ----------
    1 国内
    3 国内
    6 国内
    2 国外
    4 国外
    5 国外
    */
  • 相关阅读:
    阿里HBase高可用8年“抗战”回忆录
    Service Mesh 初体验
    阿里云HBase推出普惠性高可用服务,独家支持用户的自建、混合云环境集群
    Ververica Platform-阿里巴巴全新Flink企业版揭秘
    深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?
    AI加持的阿里云飞天大数据平台技术揭秘
    Nacos 常见问题及解决方法
    数据上云,应该选择全量抽取还是增量抽取?
    一文带你了解 Flink Forward 柏林站全部重点内容
    Oracle数据库中序列(SEQUENCE)的用法详解
  • 原文地址:https://www.cnblogs.com/scottckt/p/864409.html
Copyright © 2020-2023  润新知