【问题标题】:Filter or seperate SQL query based on column value根据列值过滤或分离 SQL 查询
【发布时间】:2019-05-27 05:31:58
【问题描述】:

我有一个查询要从电路中获取练习列表:

SELECT * 
FROM workouts
INNER JOIN circuits ON workouts.id = circuits.workout_id
INNER JOIN circuit_steps ON circuits.id = circuit_steps.circuit_id
INNER JOIN exercises ON exercises.id = circuit_steps.exercise_id
WHERE workouts.id = ${req.params.id}

当前结果是这个(为简洁起见的基本字段)

[
  {
    name: "Push Up",
    circuit_id: 1
  },
  {
    name: "Bicep Curl",
    circuit_id: 1
  },
  {
    name: "Squat",
    circuit_id: 2
  },
  {
    name: "Walk out",
    circuit_id: 2
  }
]

我希望能够通过GROUPcircuit_steps.circuit_id 得到结果所以结果是这样的:

[
  [
    { name: 'Push Up', circuit_id: 1},
    { name: 'Bicep Curl', circuit_id: 1},
  ],
  [
    { name: 'Squat', circuit_id: 2},
    { name: 'Walk Out', circuit_id: 2},
  ],
]

【问题讨论】:

    标签: sql json postgresql express


    【解决方案1】:

    你可以使用string_agg():

    SELECT cs.circuit_id, string_agg(e.name, ',') as execise_names
    FROM workouts w INNER JOIN
         circuits c
         ON w.id = c.workout_id INNER JOIN
         circuit_steps cs
         ON c.id = cs.circuit_id INNER JOIN
         exercises e
         ON e.id = cs.exercise_id
    WHERE workouts.id=${req.params.id}
    GROUP BY cs.circuit_id
    

    【讨论】:

    • 这会将练习名称分组到 1 个对象 execise_names: "Push Up,Rest,Walk Out,Rest,Bridge,Rest" 中,因为我想要两个对象数组
    猜你喜欢
    • 2022-12-04
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多