SQL:如何确定DB列中最频繁的数据长度?

SQL:如何确定DB列中最频繁的数据长度?,sql,statistics,db2,Sql,Statistics,Db2,需要分析DB列中的值的长度,并获取相同长度值数量的百分比 期望结果: Same length values in COL1 = 70% with LENGTH = 10 chars 它不是“查找最频繁的值并计算其长度”,因为如果我们有一个基数较高的键或ID列,所有值都会不同 需要一些快速工作的SQL(首选DB2方言)-不要使DB引擎过载(数十亿行) 示例1 COL1 (VARCHAR 10) ------------------

需要分析DB列中的值的长度,并获取相同长度值数量的百分比

期望结果:

            Same length values in COL1 = 70%  with LENGTH = 10 chars
它不是“查找最频繁的值并计算其长度”,因为如果我们有一个基数较高的键或ID列,所有值都会不同

需要一些快速工作的SQL(首选DB2方言)-不要使DB引擎过载(数十亿行)

示例1

         COL1 (VARCHAR 10) 
         ------------------
                     X01   
                     X02   
                     X03   
                     X04   
                     X05   
结果:

            100%, 3
            20%, 5 
           (or 20%, 13 - does not matter because values are different)
示例2

           COL1(VARCHAR 20)
         -------------------------
                    New York
                    London
                    Los Angeles
                    Paris
                    San Francisco
结果:

            100%, 3
            20%, 5 
           (or 20%, 13 - does not matter because values are different)
试试这个:

select concat(cast(rnk1 as float)/cast (totalcol1 as float)*100,'%'), col1length
from (
select *
, row_number () over (partition by col1length order by col1length) rnk1
from (
select length(col1) as col1length
,(select count(col1) from test) as totalcol1
from test)t1
order by rnk1 desc
FETCH FIRST 1 ROWS ONLY)t2
测试结果:


对任意数量的列使用
groupby GROUPING set
运算符的单个SELECT语句。下面的示例假定这些常数是相应长度(varchar_col)的结果


向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。你有多少列?动态?@GenWan为了简单起见-让我们做一栏检查,谢谢!我会的try@gmlvsv“订购方式”也会影响性能。您可以将其替换为max()。谢谢,但它只计算最频繁值长度的长度。第1列和第2列不是我所需要的,而是具有最频繁长度的行的长度。第三列是具有相应长度的多个记录。最后一列是这样长度的行的百分比。我已经根据您的示例用字符串重写了查询。