SUM UP 两列,然后在 SQL Server 中找到 find MAX 值
SUM UP two columns and then find the find MAX value in SQL Server
我正在使用 Microsoft SQL 服务器并希望找到 E_ID
和 E_Name
,其中 T1+T2
具有 MAX
值。
我有两个步骤来达到必要的结果:
- 求 table
中两列的总和作为“总计”
- 从总计中找到包含最大值的行
Table 名为“table1”的内容如下所示(T2 可能包含 NULL 值):
E_ID
E_Name
T1
T2
1
Alice
55
50
2
Morgan
60
40
3
John
65
4
Monica
30
10
5
Jessica
25
6
Smith
20
5
这是我试过的方法:
SELECT
E_ID, E_Name, MAX(total) AS max_t
FROM
(SELECT
E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2, 0) AS total
FROM
table1) AS Q1;
我收到这个错误:
'Q1.E_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
只有当我将 MAX(total) AS max_t
保留在 SELECT
部分时,我才会得到结果,但我还希望有列 E_ID
和 E_Name
.
试试这个 - 只需按 Total
列降序排序,然后取结果中的第一行:
SELECT TOP (1)
Q1.E_ID, Q1.E_Name, Q1.Total
FROM
(SELECT
E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2, 0) AS Total
FROM
table1) AS Q1
ORDER BY
Q1.Total DESC;
您不需要子查询:
SELECT
TOP 1
E_Name
FROM
tab
ORDER BY
COALESCE(T1,0)+COALESCE(T2,0) DESC
Fiddle 这里:https://dbfiddle.uk/?rdbms=sqlserver_2019l&fiddle=0cca8f7ca28dc45dd1ece505f9176bdc.
您可以使用查询:
SELECT top 1 E_ID, E_Name, (T1+T2) as Total
FROM Table1
GROUP BY E_ID,E_Name
ORDER BY Total desc
SELECT
TOP (1) , E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2,0) 总计
来自
表 1
订购方式
总计 DESC;
如果您想查看所有记录,只需应用 GROUP BY 子句即可。
SELECT
E_ID
, E_Name
, MAX(total) AS max_t
FROM
(SELECT
E_ID
, E_Name
, ISNULL(T1, 0) + ISNULL(T2, 0) AS total
FROM
table1
) AS Q1
GROUP BY
E_ID
, E_Name;
如果您只想查看数据集中的最大值,您只需应用 TOP 1(对于结果中的一条记录),然后将 T1 和 T2 相加作为总和
然后应用 ORDER BY DESC;
SELECT TOP 1
E_ID
, E_Name
, (T1 + T2) AS total
FROM
table1
ORDER BY
total DESC
我正在使用 Microsoft SQL 服务器并希望找到 E_ID
和 E_Name
,其中 T1+T2
具有 MAX
值。
我有两个步骤来达到必要的结果:
- 求 table 中两列的总和作为“总计”
- 从总计中找到包含最大值的行
Table 名为“table1”的内容如下所示(T2 可能包含 NULL 值):
E_ID | E_Name | T1 | T2 |
---|---|---|---|
1 | Alice | 55 | 50 |
2 | Morgan | 60 | 40 |
3 | John | 65 | |
4 | Monica | 30 | 10 |
5 | Jessica | 25 | |
6 | Smith | 20 | 5 |
这是我试过的方法:
SELECT
E_ID, E_Name, MAX(total) AS max_t
FROM
(SELECT
E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2, 0) AS total
FROM
table1) AS Q1;
我收到这个错误:
'Q1.E_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
只有当我将 MAX(total) AS max_t
保留在 SELECT
部分时,我才会得到结果,但我还希望有列 E_ID
和 E_Name
.
试试这个 - 只需按 Total
列降序排序,然后取结果中的第一行:
SELECT TOP (1)
Q1.E_ID, Q1.E_Name, Q1.Total
FROM
(SELECT
E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2, 0) AS Total
FROM
table1) AS Q1
ORDER BY
Q1.Total DESC;
您不需要子查询:
SELECT
TOP 1
E_Name
FROM
tab
ORDER BY
COALESCE(T1,0)+COALESCE(T2,0) DESC
Fiddle 这里:https://dbfiddle.uk/?rdbms=sqlserver_2019l&fiddle=0cca8f7ca28dc45dd1ece505f9176bdc.
您可以使用查询:
SELECT top 1 E_ID, E_Name, (T1+T2) as Total
FROM Table1
GROUP BY E_ID,E_Name
ORDER BY Total desc
SELECT
TOP (1) , E_ID, E_Name, ISNULL(T1, 0) + ISNULL(T2,0) 总计
来自 表 1
订购方式 总计 DESC;
如果您想查看所有记录,只需应用 GROUP BY 子句即可。
SELECT
E_ID
, E_Name
, MAX(total) AS max_t
FROM
(SELECT
E_ID
, E_Name
, ISNULL(T1, 0) + ISNULL(T2, 0) AS total
FROM
table1
) AS Q1
GROUP BY
E_ID
, E_Name;
如果您只想查看数据集中的最大值,您只需应用 TOP 1(对于结果中的一条记录),然后将 T1 和 T2 相加作为总和 然后应用 ORDER BY DESC;
SELECT TOP 1
E_ID
, E_Name
, (T1 + T2) AS total
FROM
table1
ORDER BY
total DESC