多列的 SQL 平均值

     2023-02-24     123

关键词:

【中文标题】多列的 SQL 平均值【英文标题】:SQL average from multiple columns 【发布时间】:2014-08-15 09:53:26 【问题描述】:

如何获得多列的平均值? 例如:

Columns:   ID 125Hz 250Hz 500Hz 750Hz 1000Hz 1500Hz 2000Hz 3000Hz 4000Hz 6000Hz 8000Hz
Values:    1  92    82     63    83    32     43     54     56     54     34      54

我想获取除 ID 之外的所有列的平均值。我该怎么做?

【问题讨论】:

添加列并除以 11 所以你可以有以数字开头的列名...今天学到了一些东西。 @AlexandreSantos,使用带引号的标识符,您甚至可以拥有几乎整个 Unicode BMP,包括空格字符 (dev.mysql.com/doc/refman/5.6/en/identifiers.html)。但是,我发现对象名称的前导数字非常令人讨厌。很容易与常规数字混合并产生意想不到的问题。非常气馁! 【参考方案1】:

您必须手动添加列,因为没有可用于水平聚合的内置函数。

select (125Hz+250Hz+500Hz+750Hz+1000Hz+1500Hz+2000Hz+3000Hz+4000Hz+6000Hz+8000Hz)/11 as aveHz from table_name

【讨论】:

【参考方案2】:
SELECT sum(125Hz + 250Hz + 500Hz + 750Hz + 1000Hz + 1500Hz + 2000Hz + 3000Hz + 
4000Hz + 6000Hz + 8000Hz)/11 as averageHz from TABLE

【讨论】:

哦,michikot 打败了我。【参考方案3】:

另一种方法,不用实际使用幻数11,更详细一点。

WITH t1 AS
(
    SELECT * FROM myTable
    WHERE (...) -- Should limit result to 1 row
),
t2 AS
(
    SELECT col1 FROM t1
    UNION ALL
    SELECT col2 FROM t1
    UNION ALL
    (...)
)
SELECT AVG(col1) FROM t2;

【讨论】:

【参考方案4】:

在 SQL-SERVER 中你可以使用这个

DECLARE @total int
DECLARE @query varchar(550)
DECLARE @ALLColumns VARCHAR(500)
SET @ALLColumns = ''

    ----Build the string columns
SELECT  @ALLColumns = @ALLColumns + '+' + '['+sc.NAME+']'
FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%YOUR_TABLE_NAME%' 
AND sc.NAME LIKE  '[0-9]%';--[0-9]% just get the column that start with number
    ----Get the total number of column, 
SELECT @total = count(*) FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%YOUR_TABLE_NAME%' 
AND sc.NAME LIKE  '[0-9]%';--[0-9]% just get the column that start with number

SET @query = 'SELECT SUM('+ SUBSTRING(@ALLColumns,2,LEN(@ALLColumns))+')/'
    +CAST(@total as varchar(4))+ ' AS [AVG] 
    FROM [YOUR_TABLE_NAME] 
    GROUP BY [ID]'

--SELECT @query 
EXECUTE(@query) 

这将执行如下查询:

SELECT SUM([125Hz]+[250Hz]+[500Hz]+[750Hz]+[1000Hz]+[1500Hz]+[2000Hz]
           +[3000Hz]+[4000Hz]+[6000Hz]+[8000Hz])/11 AS [AVG] 
FROM [YOUR_TABLE_NAME] GROUP BY [ID]

更新

添加一列来存储平均值,我称之为[AVG]并将@query的值更改为

SET @query = '
CREATE TABLE #Medition (ID int,[AVG] decimal(18,4))
INSERT INTO #Medition (ID,[AVG]) 
SELECT ID,SUM ('+ SUBSTRING(@ALLColumns,2,LEN(@ALLColumns))+')/'
+CAST(@total as varchar(10)) 
+ ' AS [AVG] FROM Medition GROUP BY ID
UPDATE YOUR_TABLE_NAME  SET YOUR_TABLE_NAME.[AVG] = #Medition.[AVG]
FROM YOUR_TABLE_NAME INNER JOIN #Medition ON YOUR_TABLE_NAME.ID =#Medition.ID
DROP TABLE #Medition
'

注意:构建查询字符串有点难看

【讨论】:

可以把平均值放到一列吗? 除了插入语句外,我什么都懂。不应该是 INSERT INTO #Medition (ID, AVG) VALUES 然后是 select 语句吗? 另外我不明白你所说的 '+ SUBSTRING(@ALLColumns,2,LEN(@ALLColumns))+' 是什么意思我只是添加这样的所有列:[125Hz]+[250Hz ]+[500Hz]+[750Hz]+[1000Hz]+[1500Hz]+[2000Hz]+[3000Hz]+[4000Hz]+[6000Hz]+[8000Hz]? 插入语句,当你从另一个表插入值时就是这样see SUBSTRING 删除字符串开头的空格和+ 符号,使用@query...取消注释此SELECT @query 并注释EXECUTE(@query) 并查看查询字符串【参考方案5】:

这将显示您拥有的每个 ID 的所有字段的平均值。

SELECT AVG(125Hz+250Hz+500Hz+750Hz+1000Hz+1500Hz+2000Hz+3000Hz+4000Hz+6000Hz+8000Hz) 
AS Average FROM table
GROUP BY ID

【讨论】:

SQL - 按多列分组后查找日期差异

】SQL-按多列分组后查找日期差异【英文标题】:SQL-Findthedifferenceindatesaftergroupingbymultiplecolumns【发布时间】:2016-08-0415:58:47【问题描述】:我在表格中有以下数据我想了解以下详细信息对于给定的游戏和ID,找出2个州的日期(以... 查看详情

SQL AVG() 函数在多列时返回 INT

...WHEREAnswers.Username=?如果我使用以下语句,我会得到正确的平均值3.33:publicfinalStringSELECT_USER_AND_AVGA 查看详情

多列的加权平均值

】多列的加权平均值【英文标题】:WeightedMeanformultiplecolumns【发布时间】:2021-09-0309:51:41【问题描述】:我试图在多列中找到每年(每一行)的加权平均值。然而,它只给了我一个所有45列和所有年份的数字......我试过了,Weighte... 查看详情

Spark Scala:多列的移动平均值

】SparkScala:多列的移动平均值【英文标题】:SparkScala:movingaverageformultiplecolumns【发布时间】:2017-06-2714:43:17【问题描述】:输入:valcustomers=sc.parallelize(List(("Alice","2016-05-01",50.00,4),("Alice","2016-05-03",45.00,2),("Alice","2016-05-04" 查看详情

组合多列并用它们的平均值替换

】组合多列并用它们的平均值替换【英文标题】:Combiningmultiplecolumnsandreplacingwiththemeanofthem【发布时间】:2017-04-1123:42:20【问题描述】:我有这样的熊猫数据框。a1a2b1b201225134542678337771我想取a1和a2、b1和b2的平均值,并将其替换为a... 查看详情

如何根据 R 中的条件对多列取平均值?

】如何根据R中的条件对多列取平均值?【英文标题】:HowdoItakeanaverageovermultiplecolumnsbasedonconditionsinR?【发布时间】:2021-07-2903:04:03【问题描述】:tconstaverageRatinglanguagestartYear1tt00000015.7en18942tt00000026.0de18923tt00000036.5ja18924tt00000046 查看详情

t 测试 groupby pandas 之后的多列

...【问题描述】:我想计算和测试pandas中两组不同的多列的平均值,我可以计算出计算部分,但测试部分到目前为止还没有好的解决方案。下面是一个玩具样品和我想要的结果。df=pd.DataFrame(np.random.randint(0,100,size 查看详情

SQL Server 上多列查询的多列索引优化

】SQLServer上多列查询的多列索引优化【英文标题】:MultiplecolumnindexesoptimizationformultiplecolumnqueriesonSQLServer【发布时间】:2011-05-1019:14:29【问题描述】:我有一个表[table]有两列需要过滤:[column1]和[column2]。在我的程序中,我执行如... 查看详情

如何获取具有多列的时间序列数据框中的每小时平均值(代码片段)

...函数按站名形成分组数据帧,然后使用聚合函数获取小时平均值。但它不起作用。>byStn=df%>%g 查看详情

sql中的多列[关闭]

】sql中的多列[关闭]【英文标题】:Multiplecolumnsinwhencaseinsql[closed]【发布时间】:2017-07-1005:32:02【问题描述】:SELECT...CASEWHENBONUS=400thenSALARY=SALARY+400ENDFromEmp;当我使用=作为工资列时,我遇到了语法错误。【问题讨论】:是要在选择... 查看详情

SQL 计算具有子句的多列

】SQL计算具有子句的多列【英文标题】:SQLCountmultipleColumnsHavingClause【发布时间】:2015-08-0716:42:50【问题描述】:我试图在[MFG#]、[CMHT]、[CMWT]和CBM列中查找重复记录,同时仍然看到一些其他名为ProdKeywords的列(不在此SQL语句中)... 查看详情

多列的SQL MAX?

】多列的SQLMAX?【英文标题】:SQLMAXofmultiplecolumns?【发布时间】:2010-09-0910:03:40【问题描述】:如何在多列的最大值中每行返回1个值:表名[Number,Date1,Date2,Date3,Cost]我需要返回这样的东西:[Number,Most_Recent_Date,Cost]查询?【问题讨... 查看详情

SQL:计算Oracle中多列的出现次数

】SQL:计算Oracle中多列的出现次数【英文标题】:SQL:CountingnumberofoccurancesovermultiplecolumnsinOracle【发布时间】:2009-04-0811:01:54【问题描述】:无法理解将返回用户访问特定服务的次数的SQL。认为它可能需要嵌套计数和选择,但无法... 查看详情

SQL:通过多列中的条件传播 Count()

】SQL:通过多列中的条件传播Count()【英文标题】:SQL:SpreadCount()byconditionsinmultiplecolumns【发布时间】:2016-04-1914:21:12【问题描述】:我有一张手提袋的桌子,上面有一个名为[Tote]的站点,如下所示:IdBarcodeChecksumPackageTypeStsDestinati... 查看详情

使用带有休眠 SQL 查询的多列的参数化 IN 子句

】使用带有休眠SQL查询的多列的参数化IN子句【英文标题】:ParameterizedINclauseusingmultiplecolumnswithhibernateSQLquery【发布时间】:2017-06-0810:51:55【问题描述】:如何在多列IN子句的情况下为休眠SQL查询设置参数?例如,SQL查询应该如下... 查看详情

从 SQL 表中删除重复的行(基于多列的值)

】从SQL表中删除重复的行(基于多列的值)【英文标题】:Removingduplicaterows(basedonvaluesfrommultiplecolumns)fromSQLtable【发布时间】:2015-07-2611:02:07【问题描述】:我有以下SQL表:AR_Customer_ShipTo+--------------+------------+-------------------+-------... 查看详情

SQL Server:多列的动态数据透视

】SQLServer:多列的动态数据透视【英文标题】:SQLServer:dynamicpivotovermanycolumns【发布时间】:2022-01-0608:37:13【问题描述】:我有一张如下所示的表格:DECLARE@TempTABLE(fldIDbigint,fldYearbigint,fldMonthbigint,fldMonthNamenvarchar(350),fldPayrollIdbigint,... 查看详情

自动创建具有多列的 SQL 表

】自动创建具有多列的SQL表【英文标题】:creatingaSQLtablewithmultiplecolumnsautomatically【发布时间】:2015-08-1812:39:28【问题描述】:我必须创建一个包含90多个字段的SQL表,其中大多数是位字段,例如N01、N02、N03...N89、N90是否有一种快... 查看详情