【发布时间】:2021-01-06 09:30:18
【问题描述】:
我正在尝试重新创建下面的 Excel 公式/表格并显示真/假但卡住了。
Excel 公式:=ABS(ROUND(MEDIAN(C$2:C2),0)-ROUND(MODE.SNGL(C$2:C2),0))
我有 200 多行数据,我只需要从第一行到当前行计算的中位数和众数。我可以为 SQL 中的所有行创建中位数,但这不符合我的需要。与模式相同。上面的公式将在 Excel 单元格 D2 中并向下填充。它在公式末尾调用的变量只是数字 4。
任何建议或指示都会很棒。谢谢!
Excel sn-p: Quick view of how this table looks in Excel
用 SQL 构建这个精确表的 SQL 代码。
IF NOT EXISTS (
select * from sysobjects where name='SampleExample' and xtype='U'
) CREATE TABLE SampleExample (
[Seconds] INT,
[Sequence] INT,
[Value] NUMERIC(12, 9),
[Result] NVARCHAR(4)
);
INSERT INTO SampleExample VALUES
(598,1,236.888453364,N'#N/A'),
(740,2,236.888453364,N'True'),
(885,3,235.463708639,N'True'),
(1024,4,236.177295446,N'True'),
(1189,5,236.177295446,N'True'),
(1330,6,236.866638064,N'True'),
(1463,7,236.177295446,N'True'),
(1599,8,236.866638064,N'True'),
(1735,9,236.866638064,N'True'),
(1863,10,236.866638064,N'True'),
(1986,11,236.866638064,N'True'),
(2110,12,236.866638064,N'True'),
(2235,13,236.880749464,N'True'),
(2362,14,236.908763647,N'True'),
(2487,15,236.908763647,N'True'),
(2610,16,236.908763647,N'True'),
(2739,17,237.190827727,N'True'),
(2865,18,237.190827727,N'True'),
(3008,19,237.190827727,N'True'),
(3132,20,237.190827727,N'True');
当前中值查询。我在我的 SQL 表中添加了一个名为 Filename 的列,该列对于所有行都是相同的值。但这会找到平板电脑中所有行的中位数,而不是从第 1 行到当前行。
Declare @Median AS INT
Select @Median = (
(Select MAX([Value])
FROM
(Select TOP 50 PERCENT [Value], [Filename]
FROM SampleExample
Order by [Filename]) as BOTTOMHALF)
+
(Select MIN([Value])
FROM
(Select TOP 50 PERCENT [Value], [Filename]
FROM SampleExample
Order by [Filename] desc) as TOPHALF) ) / 2
当前模式查询:
Declare @Mode as INT
Select @Mode = (
Select TOP 1 ROUND([Value],0) as MODE
from SampleExample
Group by [Value]
Order by COUNT(*) DESC
)
我正在寻找的结果是真/假。我在我的 SQL 查询中使用 CASE:
CASE WHEN @Variable > @Median - @Mode THEN 'True' ELSE 'False' END AS Result
【问题讨论】:
-
请标记您的数据库。
-
请展示您为获取中位数和众数而准备的 SQL。
-
这也有助于显示来自上述数据集的预期结果(例如,来自您的 Excel 版本)。
-
我已在原始帖子中添加了这些附加详细信息。谢谢。
标签: sql sql-server excel database median