当前位置: 首页 > 面试题库 >

将键值列分组为一行

司马建柏
2023-03-14
问题内容

我正在尝试从SQLite表中提取数据,该表将键值对存储在双列中。例如,用钥匙foobarman,和row,该表将如下所示:

| _id | external_id | 关键 值|
| ----- | ------------- || ---- | ------- |
| 1 | 12345 | foo | 牛|
| 2 | 12345 | 酒吧 哞|
| 3 | 12345 | 男人 孔
| 4 | 12345 | 排| 船|
| 5 | 67980 | foo | abc |
| 6 | 67890 | 酒吧 def |
| 7 | 67890 | 男人 ghi |
| 8 | 67890 | 排| jkl |

我想执行一个查询,external_id以行作为键,值作为行,每行都给我。像这样:

| external_id | foo | 酒吧 男人 排|
| ------------- | ----- | -------- || ------ | ------ |
| 12345 | 牛| | 孔 船|
| 67890 | abc | def | ghi | jkl |

我唯一能想到的解决方案是每个键的联接:

SELECT a.external_id, b.foo, c.bar, d.main, e.row 
FROM myTable AS a
LEFT JOIN 
  (SELECT external_id, key AS foo
   FROM myTable
   WHERE key="foo") AS b
   ON a.external_id = b.external_id
...
LEFT JOIN 
  (SELECT external_id, key AS row
   FROM myTable
   WHERE key="row") AS e
   ON a.external_id = e.external_id
GROUP BY a.external_id

有一个更好的方法吗?


问题答案:

另一个可用的选项是使用 条件聚合

SELECT external_id,
       MAX(CASE WHEN key = 'foo' THEN value END) AS foo,
       MAX(CASE WHEN key = 'bar' THEN value END) AS bar,
       MAX(CASE WHEN key = 'man' THEN value END) AS man,
       ... etc
FROM mytable 
GROUP BY external_id


 类似资料:
  • 我肯定这是一个愚蠢的问题,但我找不到一个简单的方法将一个列表按另一个列表分组。我在网上搜索了很多,但我只找到了带有类属性或排序元素的示例。 我有一个带有键的字符串列表,例如: 和一个我想按键列表分组的int列表,例如: 因此结果应该是一个包含子列表的列表,如下所示: 或者也可以得到指数。提前道谢。

  • 我得到了以下数组: 我想将其转换为以下内容: 做这件事最好的方法是什么? 到目前为止我已经试过了,所以得到了钥匙,但是它们的值是错误的:

  • 我一直在努力想办法创建一个HashMap,将具有相同键的值(放入列表)分组。这就是我的意思: 假设我有以下键和值: 我想把这些值放到一个 这样它就会将值分组到具有相同键的列表整数中,类似于这样: (1, {10, 11, 12}),(2, {20}), (3, {30,31}) 现在,密钥和值存储在 我不知道如何通过这个Hashmap循环创建新的Hashmap,关键是:值对列表。有人对这个话题有好

  • 问题内容: 我有两个表,关键字和数据。 表关键字具有2列(id,关键字),表数据具有3列(id [keywords.id的外键,名称,值]。 我正在使用此查询: 它返回类似: 每个id的值可以为0到3(将来可能会更多)。 如何在同一行中检索具有相同ID的所有行? 喜欢 我想这样做是因为我希望能够对值进行排序。 问题答案: 像这样使用: 另外,您可能需要根据需要获取确切的值顺序。像这样:

  • 问题内容: 我有一个SQL查询返回1行,其中包含多个列标题: 有没有一种方法可以将该行转换为2列,即: 这是在SQLServer 2008 r2上运行 编辑:添加一个更好的例子 来自一个简单的 类型查询。我要显示的是: 问题答案: 试试这个

  • 问题内容: 我有一个包含两列的表: 我需要在PostgreSQL中进行某种形式的一键编码并将表转换为: 是否可以仅使用SQL?有关如何入门的任何提示? 问题答案: 如果我正确理解,则需要条件聚合: