【问题标题】:SQL Server 2000: Length of field in 1/3 (or 2/3) of the recordsSQL Server 2000:1/3(或 2/3)记录中的字段长度
【发布时间】:2010-08-23 20:00:33
【问题描述】:

使用 SQL Server 2000 是否有更简单/更清洁的方法来执行此操作?

每隔几天我就需要这样做。

我先看看我们总共有多少条记录:

SELECT COUNT(*) FROM MyTable

然后我列出某个字段的所有长度:

SELECT LEN(MyText)
FROM MyTable
ORDER BY LEN(MyText) ASC

然后我需要向下滚动 1/3... 并记下值。 然后我需要向下滚动 2/3... 并记下值。 最后是最后一个值。

我需要找出 x、y 和 z:

 33% of the records have this field with a length under x bytes
 66% of the records have this field with a length under y bytes
100% of the records have this field with a length under z bytes

【问题讨论】:

  • 您是否有没有中断的标识列?如果你这样做(或可以加一个),然后得到总数并除以 3。

标签: sql sql-server sorting sql-order-by ranking


【解决方案1】:

在 SQL 2005 中,您可能可以为此使用排名函数。在 SQL 2000 中,我认为您在做这样的事情时遇到了困难。

DECLARE @RC INT 

CREATE TABLE #lengths
(
id INT IDENTITY(1,1),
[length] INT
)

INSERT INTO #lengths
SELECT LEN(MyText)
FROM MyTable
ORDER BY LEN(MyText) ASC


SET @rc= @@ROWCOUNT

SELECT [length] 
FROM #lengths 
WHERE id IN 
(@rc/3, (2*@rc)/3, @rc)

【讨论】:

    【解决方案2】:

    我认为你需要这样的东西:

    SELECT
     x1.l AS Length,
     x1.n      * 1e2 / (SELECT COUNT(*) FROM MyTable) AS [Percent],
     SUM(x2.n) * 1e2 / (SELECT COUNT(*) FROM MyTable) AS CumPercent
    FROM (
     SELECT LEN(MyText) AS l, COUNT(*) AS n
     FROM MyTable
     GROUP BY LEN(MyText)
    ) AS x1
    LEFT JOIN (
     SELECT LEN(MyText) AS l, COUNT(*) AS n
     FROM MyTable
     GROUP BY LEN(MyText)
    ) AS x2
     ON x2.l <= x1.l
    GROUP BY x1.l, x1.n
    ORDER BY x1.l
    

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2018-11-05
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多