遇到个 sql 难题,求助 sql 大佬

查看 48|回复 1
作者:Worldispow   
1.表结构:前几列为 id ,name 之类的字段,v1-v100 为数值类型
[td]id[/td]
[td]name[/td]
[td]v1[/td]
[td]v2[/td]
[td]v3[/td]
[td]v4[/td]
1
a
1
2
3
10
2
b
5
2
3
10
3
c
5
3
3
10
4
d
1
2
3
10
2.需求:求 v ( n )列的和,并找出 v ( n )的和最大时的列名和内容。如示例数据
sum ( v1 )=12
sum ( v2 )=9
sum ( v3 )=12
sum ( v4 )=40
显然 v4 列的和最大,那么结果就是 v4 和对应的每一行的值.
[td]id[/td]
[td]name[/td]
[td]v4[/td]
1
a
10
2
b
10
3
c
10
4
d
10
3.其他要求:只能用 sql ,环境为 mysql5.7.

SUM, SQL, name, 列名

googlefans   
WITH ColumnSums AS (
SELECT 'v1' AS column_name, SUM(v1) AS total_sum FROM your_table
UNION ALL
SELECT 'v2', SUM(v2) FROM your_table
UNION ALL
SELECT 'v3', SUM(v3) FROM your_table
-- 重复这个模式直到 v100
UNION ALL
SELECT 'v100', SUM(v100) FROM your_table
),
MaxSum AS (
SELECT column_name, total_sum
FROM ColumnSums
WHERE total_sum = (SELECT MAX(total_sum) FROM ColumnSums)
)
SELECT MaxSum.column_name, your_table.*
FROM MaxSum
CROSS JOIN your_table;
这个查询首先在 ColumnSums 中为每一列计算总和,然后在 MaxSum 中找出最大的总和及其对应的列名。最后,通过与原始表的交叉连接( CROSS JOIN ),你可以得到和最大的那一列的名字以及对应的每一行的值。
这个查询在列数非常多的情况下可能效率不高。如果你的表结构允许,考虑使用更动态的方法来处理这种类型的查询,例如编写一个存储过程。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部