0

假设我有一些示例数据salary_table如下:

    id     name        year            avg_salary
   --------------------------------------------
1   1    alice        2019         17410.407500
2   2    elsa         2020        14562.580000
3   3    edward       2019         15234.580000
4   4    anna         2021         15934.580000
.....
99  999    mike         2019        7410.407500
100 1000    mike         2020       17410.407500

我尝试使用下面的 SQL 可以得到我需要的结果,

SELECT
concat(id,'/',name),
        JSON_ARRAYAGG(
                JSON_OBJECT(
                        "year", year, "avg_salary", avg_salary
                )
        ) as detail
FROM salary_table
GROUP BY 1
ORDER BY 1 ASC

但是上面的结果很难看,

id/name   detail
----------------------
1/alice      [{"year": 2019, "avg_salary": 17410.407500}, {"year": 2020, "avg_salary": 21331.052857}, {"year": 2021, "avg_salary": 19101.316667}]
2/elsa       [{"year": 2020, "avg_salary": 14562.580000}]
3/edward     [{"year": 2019, "avg_salary": 15234.580000}]
4/anna       [{"year": 2021, "avg_salary": 15934.580000}]
5/ann        [{"year": 2020, "avg_salary": 11331.052857}, {"year": 2021, "avg_salary": 9101.316667}]
6/cathy      [{"year": 2018, "avg_salary": 7410.407500}, {"year": 2019, "avg_salary": 7410.407500}, {"year": 2020, "avg_salary": 11331.052857}, {"year": 2021, "avg_salary": 9101.316667}]

我的完美输出如下,实际上,我的结果中不需要 JSON_ARRAYAGG:

-----------------
id  name 2018_avg_salary   2019_avg_salary   2020_avg_salary   2021_avg_salary
1  alice  17410.4075       21331.05286       21331.05286   21331.05286
2  elsa   17411.4075       21332.05286       21332.05286   21332.05286

如何美化MySQL中JSON_ARRAYAGG/JSON_OBJECT的SQL查询?

4

0 回答 0