gpt4 book ai didi

mysql - SQL - 是否可以按行值制作自定义列?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:22 26 4
gpt4 key购买 nike

有谁知道是否可以像下表那样转换...同时仍然可以使用 SELECT 查询。

+----+-----------+---------------+------------+
| id | listingId | value | identifier |
+----+-----------+---------------+------------+
| 1 | 1a | Alaskan Husky | race |
| 2 | 1a | High | activity |
| 3 | 1a | White | colour |
| 4 | 1b | Akita | race |
| 5 | 1b | Medium | activty |
| 6 | 1b | Grey | colour |
+----+-----------+---------------+------------+

对于类似这样的事情,同时仍然能够使用选择查询..

+----+-----------+---------------+---------+--------+
| id | listingId | race | activty | colour |
+----+-----------+---------------+---------+--------+
| 1 | 1a | Alaskan Husky | High | White |
| 2 | 1b | Akita | Medium | Grey |
+----+-----------+---------------+---------+--------+

我也希望能够搜索这个新的“表格”。比方说,用户选择了一个类似这样的过滤器:

  • 种族:阿拉斯加雪橇犬
  • 事件:中、高

然后它应该返回 1a 的 listingId。

这样做的原因是,当所有值都放在不同的行中时,我无法执行正确的 SELECT 查询..

如您所见,listingId 应该是将它们组合在一起的变量,并使 identifier 列中的值成为一个新列。

我之所以不只使用第二个表作为默认表,是因为每个列表可以有不同的过滤器和过滤器组。我需要能够选择满足用户指定过滤器的特定列表。

谢谢。

最佳答案

您可以使用条件聚合:

select min(id) id, listingId, 
max(case when [identifier] = 'race' then [value] end) race,
max(case when [identifier] = 'activity' then [value] end) activity,
max(case when [identifier] = 'colour' then [value] end) colour
from table t
group by listingId;

关于mysql - SQL - 是否可以按行值制作自定义列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com