【问题标题】:Database structure, query vs iteration数据库结构,查询与迭代
【发布时间】:2020-09-16 09:48:27
【问题描述】:

(可能是重复的基本问题,但我不知道要搜索什么,因此请随时使用适当的数据库术语编辑此问题)

如何有效地根据列(lastfirst 名称)从数据库表中检索行组 (family members)?例如。从此

last  first ...
doe   john  ...
doe   jane  ...
smith jimmy ...
smith ted   ...
smith anna  ...

到这样的事情(省略其他数据)

doe : [{first:john, ...}, {jane}],
smith: [{jimmy}, {ted}, {anna}]

这是否需要先使用 distinctgroup by 检索公共数据(姓氏),然后对每个名称使用附加查询 (where last="smith") 进行迭代?
我认为这种幼稚的方法可能效率低下,并且有更好的解决方案。

【问题讨论】:

  • 缺少的关键字可能是“层次结构”。但这是否意味着每个父母都需要查询?

标签: database performance sqlite


【解决方案1】:

你需要GROUP_CONCAT()聚合函数:

SELECT last, GROUP_CONCAT(first) first
FROM tablename
GROUP BY last

JSON_GROUP_ARRAY():

SELECT last, JSON_GROUP_ARRAY(first) first
FROM tablename
GROUP BY last

请参阅demo

【讨论】:

  • json_object_group() 似乎允许检索 一个 附加列 - 有没有办法为每个组项返回所有列?
  • 使用我的演示将新列添加到表中,并在此处发布带有预期输出的链接以阐明您想要的内容。
  • 抱歉,here 增加一列使用 json_group_object()。如何将更多列聚合到 JSON 对象中?
  • 解决方案:JSON1函数可以构造多个元素作为参数对k1,v1, k2,v2, ..,见here
  • 这就是您应该提供预期输出的原因。 json 函数可能会返回非常复杂的结构。
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多