Big Query возвращает 0 строк, используя count (*) - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу объединить 2 таблицы, отобразить некоторую информацию о таблицах, а также общее количество подходящих элементов.Вот стандартный запрос SQL, который я пытаюсь выполнить в большом запросе:

SELECT "Active" AS type, COUNT(*) AS total, t2.display_name AS name
FROM `TABLE_1` t1
JOIN `TABLE_2` t2 ON t1.assigned_employee_id = t2.id
WHERE status = 0;

Выполнение вышеизложенного дает мне эту ошибку:

SELECT list expression references t2.display_name which is neither grouped nor aggregated at [1:69]

Поэтому я группирую поdisplay_name, как предлагается в ошибке, чтобы получить следующий запрос:

SELECT "Active" AS type, COUNT(*) AS total, t2.display_name AS name
FROM `TABLE_1` t1
JOIN `TABLE_2` t2 ON t1.assigned_employee_id = t2.id
WHERE status = 0
GROUP BY t2.display_name

Выполнение этого дает мне такой вывод: Query returned zero records.

Но если нет соответствующих записей, я хочучтобы по-прежнему получать строку, возвращенную с total, установленным в 0. Если я удалю столбец t2.display_name AS name из исходного запроса, я получу строку, возвращенную

 Row |  type  | total    
  1  | Active |   0  

Как получить тот же вывод, нос добавлением dispaly_name?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Возможно, вы можете сделать все это в одну строку?

SELECT 'Active' AS type, COUNT(*) AS total,
        ARRAY_AGG(t2.display_name) AS names
FROM `TABLE_1` t1 JOIN
     `TABLE_2` t2
      ON t1.assigned_employee_id = t2.id
WHERE status = 0;

Это всегда будет возвращать одну строку с массивом имен, которые вы ищете.

0 голосов
/ 25 апреля 2018

Во втором запросе переместите логику в предложении WHERE в счет, используя условное агрегирование:

SELECT
    "Active" AS type,
    COUNT(CASE WHEN status = 0 THEN 1 END) AS total,
    t2.display_name AS name
FROM `TABLE_1` t1
JOIN `TABLE_2` t2
    ON t1.assigned_employee_id = t2.id
GROUP BY t2.display_name

Одним из объяснений того, почему вы не получаете никаких записей, является то, что у вас нет данных с нулевым статусом. Предложение WHERE будет тогда отфильтровывать все записей. Используя условное агрегирование, будет возвращена каждая группа с нулевым или, возможно, большим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...