• 一道sql测试题目


       测试场景如下,存在一堆颜色和形状的球,需要按规则汇总。

       001 红色 圆形

       005 红色 圆形

       006 红色 圆形

       008 红色 圆形

       010 黑色 球形

       011 黄色 方形

       012 红色 圆形

      需要得出的结果是:4红色圆形 1黑色球形 1 黄色方形 1红色球形

     看到题目,我们分析一下,这是一个汇总题目,首先需要把颜色+形状汇总为不重复的值,然后找出count值,需要注意的是红色圆形一共有5个,但是结果分别是4个和1个,这里就需要仔细看一下。经过分析,这其实是一个比较题,我们把颜色形状看成一个值,比较第二行值和第一行值是否相等,如果相等,就需要计数上+1,这是一个很典型的题目,找到了这里,思路也就有了。

     1 create table #tb(编号 varchar(10),颜色 varchar(10),形状 varchar(10))
     2 insert into #tb values('001' ,'红色' ,'圆形'
     3 insert into #tb values('005' ,'红色' ,'圆形'
     4 insert into #tb values('006' ,'红色' ,'圆形'
     5 insert into #tb values('008' ,'红色' ,'圆形'
     6 insert into #tb values('011' ,'黑色' ,'球形'
     7 insert into #tb values('015' ,'黄色' ,'方形'
     8 insert into #tb values('026' ,'红色' ,'圆形'
     9 insert into #tb values('031' ,'红色' ,'圆形'
    10 insert into #tb values('035' ,'黄色' ,'球形'
    11 insert into #tb values('036' ,'黑色' ,'球形'
    12 insert into #tb values('039' ,'黑色' ,'球形'
    13 insert into #tb values('055' ,'黑色' ,'球形')
    14 go
    15 
    16 select fid=0,id=0,颜色+形状 as 颜色形状 into # from #tb order by 编号
    17 
    18 select * from #
    19 
    20 declare @颜色形状 varchar(20),@i int,@j int
    21 update # set id=@i,fid=@j,
    22             @i=case when @颜色形状=颜色形状 then isnull(@i,0)+1 else 1 end,
    23             @j=case when @颜色形状=颜色形状 then isnull(@j,0else isnull(@j,0)+1 end,
    24             @颜色形状=颜色形状
    25 select ltrim(max(id))+颜色形状 as 结果 from # group by fid,颜色形状 order by fid
    26 drop table #

      这里的处理过程是创建变量@颜色形状,来保存前一行值,用来和当前值进行比较,如果相等 @j+1,最后存在@i是为了分组方便。

        这个很典型的题目,其实就是一个比较数据是否一致的计数题。

  • 相关阅读:
    [LeetCode] Same Tree, Solution
    图搜索
    1 sec on Large Judge (java): https://github.com/l...
    [LeetCode] Path Sum, Solution
    嗯哪
    海量数据处理总结
    [LeetCode] Unique Binary Search Trees II, Solution
    [Interview] Serialize and Deserialize a tree
    设计题
    [LeetCode] Convert Sorted Array to Binary Search Tree, Solution
  • 原文地址:https://www.cnblogs.com/tippoint/p/2705849.html
Copyright © 2020-2023  润新知