sql - 转置字符串

标签 sql snowflake-cloud-data-platform transpose

我正在探索 MLB 棒球 statcast 数据,该数据位于球场级别。我想总结一下车牌外观级别的间距。相关栏目:

game_pk | pitcher_id | batter_id | inning | pitch_number | pitch_type | plt_apprnc_pk (unique)
----------------------------------------------------------------------------------------------
492321  |   542881   |   518466  |    2   |       1      |    FF      |   4923215428815184662
492321  |   543475   |   571448  |    1   |       2      |    SL      |   4923215434755714481
492321  |   543475   |   571448  |    1   |       1      |    FF      |   4923215434755714481
492321  |   543475   |   571448  |    1   |       3      |    FF      |   4923215434755714481

我正在处理一个查询,仅显示每个板外观的一次迭代 (plt_apprnc_pk),然后是 pitch_number 列(第一个音高、第二个音高、第三个音高等),显示相应音高编号的每种音高类型。本质上,我想通过 pitch_number 转置 pitch_type。

plt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
----------------------------------------------------------------
  4923215434755714481 |     SL      |      FF      |     FF

我尝试使用 Case 语句来执行此操作(即 CASE WHEN pitch_number = 1 THEN pitch_type END)。我不断为每个 plt_apprnc_pk 获取多行。

plt_apprnc_pk (unique)| first_pitch | second_pitch | third_pitch
------------------------------------------------------------------
  4923215434755714481 |     SL      |      NULL    |    NULL
  4923215434755714481 |    NULL     |      FF      |    NULL
  4923215434755714481 |    NULL     |      NULL    |     FF

根据 pitch_number 转置这些字符串,同时只保留唯一键的一次迭代的最佳方法是什么??

最佳答案

I tried doing this with Case statements (ie CASE WHEN pitch_number = 1 THEN pitch_type END). I keep getting multiple rows for each plt_apprnc_pk.

这里的模式称为条件聚合:

SELECT plt_apprnc_pk
     ,MAX(CASE WHEN pitch_number = 1 THEN pitch_type END) AS first_pitch 
     ,MAX(CASE WHEN pitch_number = 2 THEN pitch_type END) AS second_pitch 
     ,MAX(CASE WHEN pitch_number = 3 THEN pitch_type END) AS thrid_pitch 
     -- ...
     --,MAX(CASE WHEN pitch_number = n THEN pitch_type END) AS nth_pitch 
FROM tab
GROUP BY plt_apprnc_pk;

注意:必须提前知道最大“pitch_number”。

关于sql - 转置字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69503873/

相关文章:

php - 如何在 1 个 sql 查询中计算另一个表中的行数

sql - 如何从雪花数据库中的Varchar "JSON Array"中选择元素?

Pandas - Pivot/stack/unstack/melt

arrays - 使用 FasterCSV 将不均匀的行转换为列

mysql - SQL新手查询问题

sql - 可以监视/模拟 Sql Server 用户定义的函数吗?

SQL Server 2008 授予选择权限

sql - 根据两列的独特性选择行

snowflake-cloud-data-platform - Snowflake 中的四分之一函数

google-sheets - 谷歌查询或公式查找缺失的月费