【问题标题】:Getting results of a query with multiple rows as result into a single row将具有多行的查询结果作为结果获取到单行中
【发布时间】:2013-03-13 17:38:23
【问题描述】:

有没有办法让mysql查询结果为

(id,result1,[result21,result22, result23])

我正在尝试检索第三列是时间戳并且对应于相同 ID 的结果。

例如我得到的结果是

(21,29383)
(21,23988)
(22,23455)
(22,34564)

我想要结果

(21,(29383,23988))
(21,(223455,34564))

【问题讨论】:

  • 你能发布一些示例数据吗?
  • GROUP_CONCAT()聚合函数。
  • 你能发布你正在使用的 mysql 模块以及你用来获取结果的代码吗?
  • 你好 fthiella。我已经发布了示例数据。这就是我正在寻找的格式。我必须将一个元组列表转换为一个可能甚至是一个字典,其中包含一个键值的元组。此外,在元组列表中 - 第一行在多行中重复。这就是我想要分组并以形式获得结果 - (21,(29383,23988))

标签: python mysql python-2.7 tuples


【解决方案1】:

我不熟悉 MySQL,但是如果您将结果作为 Python 元组获得,则可以在 Python 端操作数据结构。一种可能的方法是:

from collections import defaultdict

results = [
    (21,29383),
    (21,23988),
    (22,23455),
    (22,34564)
]

d = defaultdict(list)

for your_id, result in results:
    d[your_id].append(result)

results_as_tuples = tuple(
    sorted([
        (your_id, tuple(results)) for your_id, results in d.iteritems()
    ])
)

print results_as_tuples # --> ((21, (29383, 23988)), (22, (23455, 34564)))

【讨论】:

  • 嗨。我确实尝试过:得到错误:对于 your_id,结果是:“值错误:要解压的值太多”。但是后来 iteritems() 被用于这个权利了吗?
  • @SumitSaurav:您收到的错误意味着您的元组包含两个以上的条目。但是,在您的示例数据中,每个元组仅包含两个条目,因此这就是我的代码示例的用途。 groupby() 可能是一个选项,是的。
  • 嗨,彼得。我已经输入了我的代码和我想要的输出。也许它会让它更清晰。感谢您的帮助。
  • @SumitSaurav 请将您的附加代码放在您的问题中,但不要放在我的答案中。
猜你喜欢
  • 2022-10-07
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多