为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确分组数据以获得树状结构?

如何正确分组数据以获得树状结构?

Go
侃侃无极 2022-04-20 19:36:38
在 golang 应用程序中,我对这样的表进行查询:| ID        | AGG_YEAR | AGG_MONTH | GENDER | AGE_RANGE | INCOME_RANGE | TOTAL ||-----------|----------|-----------|--------|-----------|--------------|-------|| 107502389 | 2019     | 7         | F      | 18_29     | 1000_2000    | 15    || 107502389 | 2019     | 7         | F      | 18_29     | 2000_4000    | 42    || 107502389 | 2019     | 7         | F      | 30_44     | 1000_2000    | 25    || 107502389 | 2019     | 7         | F      | 30_44     | 2000_4000    | 63    || 107502389 | 2019     | 7         | M      | 18_29     | 1000_2000    | 30    || 107502389 | 2019     | 7         | M      | 18_29     | 2000_4000    | 18    || 107502389 | 2019     | 7         | M      | 30_44     | 1000_2000    | 36    || 107502389 | 2019     | 7         | M      | 30_44     | 2000_4000    | 19    |此表存储有关某个月内具有某个工资水平的男性和女性的总数的信息。通常,在对数据库进行一次查询之后,每条记录都会被一一解析:type Entry struct {    ID int `json:"id"`    AggYear int `json:"agg_year"`    AggMonth int `json:"agg_month"`    Gender string `json:"gender"`    AgeRange string `json:"age_range"`    IncomeRange string `json:"income_range"`    Total int `json:"total"`}var entries []Entryrows, err := database.Query("***"); if err != nil {    fmt.Println(err)    return}defer rows.Close()for rows.Next() {    var entry Entry    if err = rows.Scan(&entry.ID, &entry.AggMethod, &entry.AggYear, &entry.AggMonth, &entry.Gender, &entry.AgeRange, &entry.IncomeRange, &entry.Total); err != nil {        fmt.Println(err)        return    }    entries = append(entries, entry)}type IncomeDetails struct {    IncomeRange string `json:"income_range"`    Total int `json:"total"`}type AgeDetails struct {    AgeRange string `json:"age_range"`    Details []IncomeDetails `json:"details"`}我想知道将以下值分组的最佳方法,如下例所示?我想了解动作的顺序。我将不胜感激任何帮助。
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

通常,我会根据我想要的响应来更新结构。例如,在您的情况下,它将是:


type DataEntry struct {

    ID int `json:"id"`

    Details []EntryDetails `json:"details"`

}


type EntryDetails struct { 

    AggYear int `json:"agg_year"`

    AggMonth int `json:"agg_month"`

    Details []GenderDetails `json:"details"`

}


type GenderDetails struct {

    Gender string `json:"gender"`

    Details []AgeDetails `json:"details"`


type AgeDetails struct {

    AgeRange string `json:"age_range"`

    Details []IncomeDetails `json:"details"`

}


type IncomeDetails struct { 

    IncomeRange string `json:"income_range"`

    Total int `json:"total"`

}

将代码分成更小的部分总是更容易阅读和维护。


下一部分将详细信息添加到结构中:您应该根据要求查询您的代码以逐个填充结构。例如:先getID-'Entry struct',然后getAggYear & getAggMonth为ID-'EntryDetails struct'等等。


你可以在这里找到完整的工作程序:https: //play.golang.org/p/_pdb5y9Wd-O


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信