Navigation

    MemFireDB论坛

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    叮~您有一封国庆SQL闯关邀请函,请查收

    活动
    10
    16
    273
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      admin last edited by admin

      国庆.jpeg

      欢度国庆~SQL挑战邀请活动开始啦!

      即日起至 10 月 8 日,闯关成功就有机会获得定制礼品~

      第一关

      根据生成的数据,构造一条SQL,输出结果为:国庆快乐

      -- 生成数据的SQL语句
      CREATE TABLE level1(attr text);
      insert into level1 values('节日快乐,欢度国庆');
      

      第二关

      根据生成的数据,用一条SQL语句,生成国庆快乐的柱状图,柱状图所表示的“国庆快乐”的字数要与实际生成的数据保持一致:

      -- 生成数据的SQL语句
      CREATE TABLE level2(attr text);
      insert into level2 SELECT attr from (select generate_series(1, 40), substring('国庆快乐' from (random()*3)::int+1 for 1) attr) as t;
      

      f5358aba-a971-4516-9e08-aa078f0bc261-image.png

      命令行下的效果:

              chart        
      ---------------------    
       14 |       快    
       13 |       快    
       12 |    庆 快    
       11 |    庆 快    
       10 |    庆 快    
       09 |    庆 快    
       08 | 国 庆 快    
       07 | 国 庆 快    
       06 | 国 庆 快    
       05 | 国 庆 快 乐 
       04 | 国 庆 快 乐 
       03 | 国 庆 快 乐 
       02 | 国 庆 快 乐 
       01 | 国 庆 快 乐 
       -------------------
            2022-10-01
      

      MemFire Cloud SQL编辑器中的效果:
      7f282437-50c7-4672-be37-3b21b61a55f8-image.png

      参与方式

      活动期间,只要在论坛活动帖下方评论区贴出答案就算参加活动。注意,截图需为在MemFire Cloud SQL编辑器中的效果。

      条件 奖品
      闯过一关 读写礼包一份
      闯过两关 数据线或超大容量马克杯一个
      点赞数最高者 文化衫一件

      管理员届时将核对账号信息,重复答案以优先提交者为首选
      活动结束后 3 个工作日内公布获奖名单

      部分周边展示

      周边.png

      *活动最终解释权归「MemFireDB」所有

      1 Reply Last reply Reply Quote 0
      • pekin
        pekin last edited by

        第一关

        select concat(right(attr,2),right(left(attr,4),2)) from level1
        

        cb724f4b-e0fe-4f81-a7d0-e3cf750c8d2c-image.png
        第二关

        with tmp as (select num, string_agg(content, ' ') str
                     from (select num, array_to_string(array_agg(concat(guo, qing, kuai, le)), '') as content
                           from (select row_number() over (PARTITION BY attr)   num,
                                        CASE attr WHEN '国' THEN '国' ELSE '' END guo,
                                        CASE attr WHEN '庆' THEN '庆' ELSE '' END qing,
                                        CASE attr WHEN '快' THEN '快' ELSE '' END kuai,
                                        CASE attr WHEN '乐' THEN '乐' ELSE '' END le
                                 from level2) as rn
                           group by num, guo, qing, kuai, le
                           order by num, guo desc, qing desc, kuai desc, le desc) as nc
                     group by num
                     order by num)
        
        select '                   ' chart union all
        select '       chart       ' chart union all
        select '-------------------' chart union all
        select chart
        from (select format('%2s | %s  ', lpad(concat(tmp.num), 2, '0'),
                            concat(CASE
                                       WHEN position('国' in str) = 0 THEN '   '
                                       ELSE (CASE
                                                 WHEN position('庆' in str) <> 0 or position('快' in str) <> 0 or
                                                      position('乐' in str) <> 0 THEN ''
                                                 ELSE str END) END,
                                   CASE
                                       WHEN position('庆' in str) = 0 THEN '   '
                                       ELSE (CASE
                                                 WHEN position('快' in str) <> 0 or position('乐' in str) <> 0 THEN ''
                                                 ELSE str END) END,
                                   CASE
                                       WHEN position('快' in str) = 0 THEN '   '
                                       ELSE (CASE WHEN position('乐' in str) <> 0 THEN '' ELSE str END) END,
                                   CASE WHEN position('乐' in str) = 0 THEN '   ' ELSE str END)) chart
              from tmp
              order by num desc) as tc
        union all
        select '-------------------' chart
        union all
        select '    2022-10-01     ' chart;
        

        467d0f25-66b9-4cb3-9be4-d52e620357b8-image.png

        不要为了保持存活浪费太多时间,要有活自己的时间

        1 Reply Last reply Reply Quote 1
        • H
          hola last edited by

          第一关

          select concat(substring(attr, 8, 2), substring(attr, 3, 2)) from level1;
          

          6622afcb-cf56-4d0f-946f-7431b8ca020a-image.png

          1 Reply Last reply Reply Quote 1
          • 花
            花殇 last edited by

            第一关:

            select concat(right(attr, 2), substring(attr from 3 for 2)) from level1;
            

            第一关.png

            第二关:

            with tmp as (select num, string_agg(content, ' ') str
                         from (select num, array_to_string(array_agg(concat(guo, qing, kuai, le)), '') as content
                               from (select row_number() over (PARTITION BY attr)   num,
                                            CASE attr WHEN '国' THEN '国' ELSE '' END guo,
                                            CASE attr WHEN '庆' THEN '庆' ELSE '' END qing,
                                            CASE attr WHEN '快' THEN '快' ELSE '' END kuai,
                                            CASE attr WHEN '乐' THEN '乐' ELSE '' END le
                                     from level2) as rn
                               group by num, guo, qing, kuai, le
                               order by num, guo desc, qing desc, kuai desc, le desc) as nc
                         group by num
                         order by num)
            
            select '       chart       ' chart union all
            select '-------------------' chart union all
            select chart
            from (select format('%2s | %s |', lpad(concat(tmp.num), 2, '0'),
                                concat(CASE
                                           WHEN position('国' in str) = 0 THEN '   '
                                           ELSE (CASE
                                                     WHEN position('庆' in str) <> 0 or position('快' in str) <> 0 or
                                                          position('乐' in str) <> 0 THEN ''
                                                     ELSE str END) END,
                                       CASE
                                           WHEN position('庆' in str) = 0 THEN '   '
                                           ELSE (CASE
                                                     WHEN position('快' in str) <> 0 or position('乐' in str) <> 0 THEN ''
                                                     ELSE str END) END,
                                       CASE
                                           WHEN position('快' in str) = 0 THEN '   '
                                           ELSE (CASE WHEN position('乐' in str) <> 0 THEN '' ELSE str END) END,
                                       CASE WHEN position('乐' in str) = 0 THEN '   ' ELSE str END)) chart
                  from tmp
                  order by num desc) as tc
            union all
            select '-------------------' chart
            union all
            select '    2022-10-01     ' chart;
            

            第二关.png

            1 Reply Last reply Reply Quote 1
            • A
              aaaa果 @aaaa果 last edited by

              @aaaa果
              1.

              SELECT overlay(attr placing '' from 1 for 7)||substring(attr  from 3 for 2)  from level1;
              
              SELECT '        chart       ' AS chart UNION ALL
              SELECT '--------------------' AS chart UNION ALL
              SELECT chart FROM (
              SELECT concat (LPAD(js :: TEXT,2,'0'),' ','|',' ',COALESCE (MIN (guo),'  '),' ',COALESCE (MIN (qing),'  '),' ',COALESCE (MIN (kuai),'  '),' ',COALESCE (MIN (lei),'  '),' ') AS chart,LPAD(js :: TEXT,2,'0') seNo FROM (
              SELECT ROW_NUMBER () OVER (PARTITION BY attr ORDER BY attr) js,CASE WHEN attr='国' THEN '国' END guo,CASE WHEN attr='庆' THEN '庆' END qing,CASE WHEN attr='快' THEN '快' END kuai,CASE WHEN attr='乐' THEN '乐' END lei FROM level2) tmp GROUP BY js ORDER BY seNo DESC) tmp UNION ALL 
              SELECT '--------------------' UNION ALL 
              SELECT '     2022-10-01     '
              
              1 Reply Last reply Reply Quote 1
              • A
                aaaa果 last edited by

                b4d70ada-2674-41db-a6fd-6fb57968ef0a-image.png

                659aae1c-1628-4d12-86d7-2a41ac6b3b96-image.png

                A 1 Reply Last reply Reply Quote 0
                • W
                  wsy last edited by

                  *第一关

                  SELECT concat(substr(attr,8,2),substr(attr,3,2)) str FROM LEVEL1  
                  
                  • 3734c866-e5e5-4764-8ef5-5d668eee4bbd-image.png

                  • 第二关

                  SELECT '        chart       ' AS chart UNION ALL
                  SELECT '--------------------' AS chart UNION ALL
                  SELECT chart FROM (
                  SELECT concat (LPAD(js :: TEXT,2,'0'),' ','|',' ',COALESCE (MIN (gou),'  '),' ',COALESCE (MIN (qing),'  '),' ',COALESCE (MIN (kuai),'  '),' ',COALESCE (MIN (lei),'  '),' ') AS chart,LPAD(js :: TEXT,2,'0') seNo FROM (
                  SELECT ROW_NUMBER () OVER (PARTITION BY attr ORDER BY attr) js,CASE WHEN attr='国' THEN '国' END gou,CASE WHEN attr='庆' THEN '庆' END qing,CASE WHEN attr='快' THEN '快' END kuai,CASE WHEN attr='乐' THEN '乐' END lei FROM level2) tmp GROUP BY js ORDER BY seNo DESC) tmp UNION ALL 
                  SELECT '--------------------' UNION ALL 
                  SELECT '     2022-10-01     '
                  

                  a3028fc2-8fab-486b-a7f8-d8f9da5ba192-image.png

                  1 Reply Last reply Reply Quote 1
                  • J
                    joy last edited by

                    第二关
                    SQL 脚本:
                    WITH zuguowansui AS (
                    SELECT concat(LPAD(rn::text, 2, '0'),' ','|',' ',COALESCE(min(guo),' '),' ',COALESCE(min(qing),' '),' ',COALESCE(min(kuai),' '),' ',COALESCE(min(le),' '),' ') as chart,
                    LPAD(rn::text, 2, '0'),
                    '|',
                    min(guo) "国",
                    min(qing) "庆",
                    min(kuai) "快",
                    min(le) "乐"
                    FROM (SELECT row_number() OVER (PARTITION BY attr ORDER BY attr) rn,
                    CASE WHEN attr = '国' THEN '国' END guo,
                    CASE WHEN attr = '庆' THEN '庆' END qing,
                    CASE WHEN attr = '快' THEN '快' END kuai,
                    CASE WHEN attr = '乐' THEN '乐' END le
                    FROM level2) zuguowansui
                    GROUP BY rn
                    ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC)

                    select ' chart ' as biaotou
                    union all
                    select '--------------------' as fengefuqi
                    union all
                    SELECT chart
                    from zuguowansui
                    union all
                    select '--------------------' fengefuzhi
                    union all
                    select ' 2022-10-01 ' guoqingjie

                    效果图:
                    182d9729-6384-4b76-a823-4ce5fc0fc9d3-image.png

                    1 Reply Last reply Reply Quote 1
                    • J
                      joy last edited by

                      -- 第一关
                      SQL 脚本:
                      select concat(right(attr,2),SUBSTRING(attr,3,2)) guoqingkuaile from level1
                      效果图
                      0317faa8-2a3d-4932-8233-64969ee2ed65-image.png

                      1 Reply Last reply Reply Quote 1
                      • 花
                        花殇 last edited by

                        This post is deleted!
                        1 Reply Last reply Reply Quote 0
                        • R
                          rui @pekin last edited by

                          @pekin 确实😊 😊

                          1 Reply Last reply Reply Quote 0
                          • pekin
                            pekin @rui last edited by

                            @rui 哈哈哈哈,这出题人绝对领悟到了羊的精髓了👶 🤡

                            不要为了保持存活浪费太多时间,要有活自己的时间

                            R 1 Reply Last reply Reply Quote 0
                            • C
                              caffeine last edited by

                              @admin 在 叮~您有一封国庆SQL闯关邀请函,请查收 中说:

                                2022-10-01
                              

                              第一关:

                              -- 闯关第一关
                              select concat(right(attr,2),SUBSTRING(attr,3,2)) from level1 
                              

                              效果:
                              0ade838f-bc67-4266-bf90-8a5b4181dccf-image.png

                              第二关:

                              -- 闯关第二关
                              -- 闯关第二关
                              WITH d AS (
                                  SELECT row_number() OVER (PARTITION BY attr ORDER BY attr) rn,
                                         CASE WHEN attr='国' THEN '国'END gou,
                                         CASE WHEN attr='庆' THEN '庆' END qing,
                                         CASE WHEN attr='快' THEN '快' END kuai,
                                         CASE WHEN attr='乐' THEN '乐'  END lei
                                  FROM level2
                              )
                              
                              select concat(lpad(ss."标号",2,'0') ,' | ',ss."国",' ',ss."庆",' ',ss."快",' ',ss."乐")chart from(
                              select cast(row_number() over(order by t."庆" desc) as varchar) "标号",t.* from(
                                SELECT 
                                      case when min(gou)='国' then '国' else ' ' end "国",
                                       case when min(qing)='庆' then '庆' else ' ' end "庆",
                                       case when min(kuai)='快' then '快' else ' ' end "快",
                                       case when min(lei)='乐' then '乐' else ' ' end "乐"
                                FROM d
                                GROUP BY rn
                                ORDER BY 国 ASC, 庆 ASC, 快 ASC, 乐 ASC)t)ss
                              union all select '-------------------'
                              union all select '     2022-10-01'
                              
                              
                              

                              效果:
                              1fa27578-0fe0-4de2-8a73-a4aa4f78ec4a-image.png

                              1 Reply Last reply Reply Quote 1
                              • R
                                rui @MemFireDB Robot last edited by rui

                                @memfiredb-robot 加上了

                                更新 新要求

                                03f46fdd-6cfa-4b64-9339-d9f6a2d97b80-680c22ff4b5ba1c6b3fa6720f3e91bc.png

                                验证

                                39fdeb7d-ed08-4626-a1d7-1e73687c27d0-image.png

                                code

                                
                                WITH tmp AS (
                                    SELECT concat(LPAD(rn::text, 2, '0'),' ','|',' ',COALESCE(min(gou),'  '),' ',COALESCE(min(qing),'  '),' ',COALESCE(min(kuai),'  '),' ',COALESCE(min(lei),'  '),' ') as chart,
                                           LPAD(rn::text, 2, '0'),
                                           '|',
                                           min(gou)  "国",
                                           min(qing) "庆",
                                           min(kuai) "快",
                                           min(lei)  "乐"
                                    FROM (SELECT row_number() OVER (PARTITION BY attr ORDER BY attr) rn,
                                                 CASE WHEN attr = '国' THEN '国' END                 gou,
                                                 CASE WHEN attr = '庆' THEN '庆' END                 qing,
                                                 CASE WHEN attr = '快' THEN '快' END                 kuai,
                                                 CASE WHEN attr = '乐' THEN '乐' END                 lei
                                          FROM level2) tmp
                                    GROUP BY rn
                                    ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC)
                                
                                select '        chart       ' as chart
                                union all
                                select '--------------------' as chart
                                union all
                                SELECT chart
                                from tmp
                                union all
                                select '--------------------'
                                union all
                                select '     2022-10-01     '
                                

                                第一题第二题差这么多 我愿称为关了个关

                                pekin 1 Reply Last reply Reply Quote 0
                                • M
                                  MemFireDB Robot @rui last edited by admin

                                  @rui 亲~第二关答案格式详参文章中的“命令行下的效果”以及“MemFire Cloud SQL编辑器中的效果”哦~需要包含 表头+柱状图+左侧标尺+时间 哦~

                                  R 1 Reply Last reply Reply Quote 0
                                  • R
                                    rui last edited by

                                    根据生成的数据,构造一条SQL,输出结果为:国庆快乐

                                    select concat(right(attr,2),right(left(attr,4),2)) from level1 ;
                                    

                                    验证:

                                    62cfab20-337f-4ad4-b305-47cb5a4f8cad-image.png

                                    根据生成的数据,用一条SQL语句,生成国庆快乐的柱状图,柱状图所表示的“国庆快乐”的字数要与实际生成的数据保持一致:

                                    WITH d AS (
                                        SELECT row_number() OVER (PARTITION BY attr ORDER BY attr) rn,
                                               CASE WHEN attr='国' THEN '国' END gou,
                                               CASE WHEN attr='庆' THEN '庆' END qing,
                                               CASE WHEN attr='快' THEN '快' END kuai,
                                               CASE WHEN attr='乐' THEN '乐' END lei
                                        FROM level2
                                    )
                                    SELECT min(gou) "国",
                                           min(qing) "庆",
                                           min(kuai) "快",
                                           min(lei) "乐"
                                    FROM d
                                    GROUP BY rn
                                    ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC;
                                    

                                    验证:

                                    9177ec74-a29e-4832-903e-4b58c5b52a3a-image.png

                                    M 1 Reply Last reply Reply Quote -1
                                    • First post
                                      Last post