создание записей о выигрышах / проигрышах с использованием групп по количеству - PullRequest
0 голосов
/ 11 января 2020

я пытаюсь создать результат запроса из 3 полей, рынка, выигрышей и проигрышей. Результат выигрыша и проигрыша основан на логическом поле, просто подсчитывающем количество записей true или false, я создал 3 отдельных запроса и получил их, чтобы дать мне нужные результаты, просто возникли проблемы при объединении их в большой запрос Google, получаю ошибку «Скалярный подзапрос сгенерировал более одного элемента», не совсем понимая это утверждение, спасибо

select market, count(*)TotalGamesPLayed, 

(select count(*)
from `bigquery-public-data.ncaa_basketball.mbb_teams_games_sr` 
  WHERE
    season IN (2017)
    AND conf_name IN ("Big Ten") and win = true 
    group by season, market
    order by market asc)win,

    (select count(*)
from `bigquery-public-data.ncaa_basketball.mbb_teams_games_sr` 
  WHERE
    season IN (2017)
    AND conf_name IN ("Big Ten") and win = false 
    group by season, market
    order by market asc)loss,
    from `bigquery-public-data.ncaa_basketball.mbb_teams_games_sr` 
  WHERE
    season IN (2017)
    AND conf_name IN ("Big Ten") 
    group by market
    order by market asc

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  market, 
  COUNT(*) AS TotalGamesPLayed, 
  COUNTIF(win) AS win, 
  COUNTIF(NOT win) AS loss 
FROM `bigquery-public-data.ncaa_basketball.mbb_teams_games_sr` 
WHERE season IN (2017)
AND conf_name IN ("Big Ten") 
GROUP BY market
ORDER BY market ASC
0 голосов
/ 11 января 2020

В настоящее время вы пытаетесь запустить подзапросы по SELECT причине, которая обычно требует корреляции с внешним запросом для возврата одного значения. Вместо этого присоедините подзапросы как производные таблицы в предложениях FROM | и JOIN. Однако, поскольку оба запроса используют одни и те же источники, выполните один запрос условного агрегата, в котором условия WHERE перемещены в операторы CASE.

select market,
       count(*) as total_games,
       sum(case 
                when win = true 
                then 1
                else 0
           end) as win,
       sum(case 
                when win = false
                then 1
                else 0
           end) as loss
from `bigquery-public-data.ncaa_basketball.mbb_teams_games_sr`
where season = 2017 
  and conf_name = 'Big Ten'
group by market
order by market asc

Кроме того, в некоторых базах данных можно даже пропустить CASE и суммировать логические условия:

 sum(win = true) as win,
 sum(win = false) as loss
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...