首页 > 解决方案 > 如何执行引用另一列的 LIKE 函数?

问题描述

所以我的问题是,我正在使用的三个表,// ,Table A它们Table B都有数字机制。所以可以说是支出,是收入。包含视频游戏的名称以及它所使用的辅助名称。我想要做的是能够同时显示和添加视频游戏名称和视频游戏名称辅助。Table CTable A & Table BTable ATable BTable 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_Secondaryonly 的查找表。所以对于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。很抱歉造成混乱,没有更好地澄清它!

标签: google-bigquery

解决方案


以下是 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     

推荐阅读