Как мне сделать функцию LIKE, ссылающуюся на другой столбец? - PullRequest
1 голос
/ 08 мая 2019

Итак, моя проблема в том, что у меня три таблицы, с которыми я работаю, 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

EDIT1

Я должен пояснить это подробнее, TableC является только справочной таблицей, которая имеет Names, которая содержит только Name_Secondary.Таким образом, для 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 имеет только 2 из 5 Names, перечисленных в списке, а только 2 имеют Name_Secondary.Извините за путаницу и не уточняю ее лучше!

1 Ответ

2 голосов
/ 08 мая 2019

Ниже для BigQuery Standard 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     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...