google-bigquery - 如何执行引用另一列的 LIKE 函数?
问题描述
所以我的问题是,我正在使用的三个表,// ,Table A
它们Table B
都有数字机制。所以可以说是支出,是收入。包含视频游戏的名称以及它所使用的辅助名称。我想要做的是能够同时显示和添加视频游戏名称和视频游戏名称辅助。Table C
Table A & Table B
Table A
Table B
Table C
我试图做类似的事情,
a.Name LIKE c.Name_Secondary
但这只是显示a.Name
结果。表格如下所示:
Table A
Name | Revenue
TW WH2 | 30.00
Battlefield | 20.00
TW WH2 | 15.00
Battlefield | 5.00
T2 DLC 18674 | 5.00
B DLC 57948 | 10.00
T2 DLC 18674 | 5.00
B DLC 57948 | 5.00
Table B
Name | Spend
TW WH2 | 60.00
Battlefield | 40.00
TW WH2 | 40.00
Battlefield | 20.00
T2 DLC 18674 | 9.00
B DLC 57948 | 15.00
T2 DLC 18674 | 10.00
B DLC 57948 | 9.00
Table C
Name | Name_Secondary
TW WH2 | T2 DLC 18674
Battlefield | B DLC 57948
我当前的查询看起来像:
SELECT DISTINCT
a.Name,
SUM(b.Spend),
SUM(a.Revenue)
FROM
Example.Table_A a
INNER JOIN
(
SELECT
Name,
SUM(Spend) AS Spend
FROM
Example.Table_B
GROUP BY 1) b
ON
a.Name = b.Name
INNER JOIN
Example.Table_C c
ON
a.Name = b.Name
GROUP BY
1
我尝试的是添加Name_Secondary
到第一个 SELECT 中,
SELECT DISTINCT
a.Name,
c.Name_Secondary
SUM(b.Spend),
SUM(a.Revenue)
FROM
Example.Table_A a
但我得到的结果只是来自a.Name
,我得到的结果如下:
Name | Name_Secondary | Spend | Revenue
TW WH2 | T2 DLC 18674 | 100.00 | 45.00
Battlefield | B DLC 57948 | 60.00 | 25.00
我也尝试将它添加到一个WHERE
函数中,例如:
WHERE
a.Name LIKE c.Name_Secondary
GROUP BY
1
但是在没有插入列的情况下显示了与上面相同的结果Name_Secondary
。
我希望结果显示的是:
Name | Spend | Revenue
TW WH2 | 118.00 | 55.00
Battlefield | 84.00 | 40.00
这可能吗?还是最终会变成这样:
WHERE
(a.Name LIKE '%TW%'
OR a.Name LIKE '%Batt%'
OR a.Name LIKE '%T2_DLC_18674%'
OR a.Name LIKE '%B_DLC_57948%')
GROUP BY
1
任何帮助都会很棒,如果需要进一步澄清,我当然可以添加更多信息作为编辑。
-Maykid
编辑1
我应该进一步澄清这一点,TableC
只是一个Names
包含 a Name_Secondary
only 的查找表。所以对于TableA
&TableC
他们将有数百个名字,而TableC
只有几个(20-30)。例如:
Table A
Name
TH WH2
Battlefield
TH WH
Satisfactory
Starcraft II
Table C
Name | Name_Secondary
TW WH2 | T2 DLC 18674
Battlefield | B DLC 57948
正如您所看到的,Table C
列出的 5 个中只有 2 个Names
,因为只有 2 个Name_Secondary
。很抱歉造成混乱,没有更好地澄清它!
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
WITH flattened_tableC AS (
SELECT Name, Name AS join_value FROM `project.dataset.tableC` c UNION ALL
SELECT Name, Name_Secondary AS join_value FROM `project.dataset.tableC` c
), revenues AS (
SELECT c.Name, SUM(Revenue) AS Revenue
FROM flattened_tableC c
LEFT JOIN `project.dataset.tableA` a ON c.join_value = a.Name
GROUP BY 1
), spending AS (
SELECT c.Name, SUM(Spend) AS Spend
FROM flattened_tableC c
LEFT JOIN `project.dataset.tableB` b ON c.join_value = b.Name
GROUP BY 1
)
SELECT Name, Spend, Revenue
FROM spending
FULL OUTER JOIN revenues
USING (Name)
如果适用于您的问题的样本数据 - 上述查询产生以下结果
Row Name Spend Revenue
1 TW WH2 119.0 55.0
2 Battlefield 84.0 40.0
推荐阅读
- python - Discord.py 获取消息嵌入
- ios - 当tableview中的行被选中时,tableview恢复到初始状态
- typescript - 如何显式声明某个 Phaser 类型的变量?
- css - 删除内联样式的正则表达式
- r - R计数功能
- javascript - repl.it javascript 石头、纸、剪刀作业。我错过了什么?
- java - NetBeans Look&Feel 主题与它在 IDE 中的外观不同
- excel - 无法在 Power Pivot 中使用新度量
- javascript - 从选择框Javascript获取二维数组
- javascript - 如何在目标的兄弟姐妹上触发事件