【问题标题】:Calculate Average of the largest values in multiple columns计算多列中最大值的平均值
【发布时间】:2019-11-07 07:16:56
【问题描述】:

我有这张桌子

[1|Sub1|Mark1|Sub2|Mark2|Subj3|Mark3|...]
[2|JSP |85   |ASP |70   |PHP  |95   |...]

我需要两个最高科目的平均分吗?

例如

avg(Mark1,Mark3);

【问题讨论】:

  • 您对 SQL Server 感兴趣吗? MySQL?还是两者兼而有之?
  • 两个我都需要。
  • 首先,修复损坏的架构;数据库表不是电子表格。

标签: mysql sql sql-server max average


【解决方案1】:

你是在问这个吗?

SELECT ID,
  (SELECT AVG(v) 
   FROM (VALUES (Mark1), (Mark2), (Mark3), (Mark4), (Mark5)) AS value(v)) as [AverageMarks]
FROM Table1

如果您只在 3 门科目中寻找 2 门最高科目的平均分,那么试试这个。

SELECT ID,
  (SELECT (SUM(v)-MIN(V))/2
   FROM (VALUES (Mark1), (Mark2), (Mark3)) AS value(v)) as [AverageMarks]
FROM Table1

FIDDLE DEMO

【讨论】:

  • How to Answer 强烈建议只回答问得很好的问题。
  • 谢谢@VigneshKumarA 那么如果我只需要最大三个的平均值呢?
  • 第5门科目,要不要求前3门科目的平均值?
  • 请编辑您的问题并更新所有这些信息。同时发布示例数据。
  • 更新了我的答案。看看
【解决方案2】:

考虑以下几点:

DROP TABLE IF EXIST my_table;

CREATE TABLE my_table
(subject CHAR(3) PRIMARY KEY
,mark INT NOT NULL
);

INSERT INTO my_table VALUES
('JSP',85),
('ASP',70),
('PHP',95);   

SELECT AVG(a.mark)
  FROM 
     ( SELECT mark FROM my_table ORDER BY mark DESC LIMIT 2 ) a;

+-------------+
| AVG(a.mark) |
+-------------+
|     90.0000 |
+-------------+

【讨论】:

  • 我想,你错过了用户的表格结构和原始要求!
  • @VigneshKumarA 不。OP 忽略了关系数据库是什么以及它是如何工作的。我们的职责不是为这类错误提供贴膏药,而是纠正它们。
  • 首先他想在列而不是行之间找到平均值
  • ...对于格式良好的数据,您永远不需要或不想这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多