Mysql 基于多列中的唯一值对列求和

Mysql 基于多列中的唯一值对列求和,mysql,Mysql,如果我有一个数据库,上面列出了我的名字和两年的年收入(我知道这是一个糟糕的数据库设计,但我现在无权更改)。例如: 姓名2000,姓名2010,收入2000,收入2010 如何构造查询以返回第一个结果列中两个名称列中的所有唯一名称。第二个结果列应该是该名称2000年所有收入的总和。第三个应该是2010年该名称所有收入的总和 显然,在本例中,一个人(记录)可能在不同年份之间更改姓名,或者在这两个年份中都没有姓名 我可以在一个查询中完成此操作吗?按姓名的某个子集进行筛选的功能也很方便。我建议使用子查询

如果我有一个数据库,上面列出了我的名字和两年的年收入(我知道这是一个糟糕的数据库设计,但我现在无权更改)。例如:

姓名2000,姓名2010,收入2000,收入2010

如何构造查询以返回第一个结果列中两个名称列中的所有唯一名称。第二个结果列应该是该名称2000年所有收入的总和。第三个应该是2010年该名称所有收入的总和

显然,在本例中,一个人(记录)可能在不同年份之间更改姓名,或者在这两个年份中都没有姓名


我可以在一个查询中完成此操作吗?按姓名的某个子集进行筛选的功能也很方便。

我建议使用子查询,将2个结果合并在一起,一组姓名和收入对应一个,另一组姓名和收入对应一个伪0

大概是这样的:-

SELECT aname, SUM(aincome2000), SUM(aincome2010)
FROM
(
    SELECT Name_2000 AS aname, Income_2000 AS aincome2000, 0 AS aincome2010
    FROM sometable
    UNION ALL
    SELECT Name_2010 AS aname, 0 AS aincome2000, Income_2010 AS aincome2010
    FROM sometable
) sub1
GROUP BY aname

你能展示一些样本数据和你想要得到的结果吗?我特别想了解您希望如何处理名称更改。相同的记录在name_2010和name_2000中的名称不同。因此,您希望在结果中有两行,一个用于2000年的姓名,2010年的收入为
null
,另一个用于2010年的姓名,2000年的收入为
null
。不。我只希望在这两个年份中每个唯一的姓名都有一行。总数应为当年与该行匹配的所有姓名的累计总数。如果那个名字在那一年里没有出现,那就只有0了,如果你知道我的意思的话……天哪。它起作用了。不是很快,但它应该能让我越过这条线。谢谢我还添加了一个“WHERE char_length(aname)>1”来删除带零的行,并在索引上添加一个空白anameDepending,这样可以加快速度。您可以将required WHERE子句添加到两个联合子查询中(它们可能使用索引),类似地,您可以在每个子查询中求和。