2016-07-28 5 views
0

Мне нужно выполнить следующую логику. У меня есть таблица с несколькими полями, и из этой таблицы мне нужно выбрать prod, у которого есть группа c, но не d. Некоторые prods будут иметь группу c, а также d. И из выбранных папок я должен выбрать другие поля, такие как широта, долгота и т. Д.Как выбрать конкретные записи из таблицы BigQuery?

Из таблицы, использующей SQL, как получить выделенные строки?

enter image description here

ответ

1

Мое понимание, что с помощью «c» вы имели в виду «i» и «d» вы имели в виду «f»
Ниже этого.
Он определяет те Прод-х, которые находятся в «я» группе, но не в группе «F»

SELECT Prod 
FROM (
    SELECT Prod, 
    CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM YourTable 
    GROUP BY Prod 
) 
WHERE list CONTAINS '|i|' 
AND NOT list CONTAINS '|f|' 

Вы можете проверить это с ниже

SELECT Prod 
FROM (
    SELECT 
    Prod, 
    CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM 
    (SELECT 'prod1' AS Prod, 'i' AS group), 
    (SELECT 'prod1' AS Prod, 'f' AS group), 
    (SELECT 'prod1' AS Prod, 'f' AS group), 
    (SELECT 'prod2' AS Prod, 'i' AS group), 
    (SELECT 'prod3' AS Prod, 'i' AS group), 
    (SELECT 'prod4' AS Prod, 'i' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    (SELECT 'prod4' AS Prod, 'f' AS group), 
    GROUP BY Prod 
) 
WHERE list CONTAINS '|i|' 
AND NOT list CONTAINS '|f|' 

так что вы окончательный запрос может выглядеть как

SELECT <list of needed fields> 
FROM YourTable 
WHERE Prod IN (
    SELECT Prod 
    FROM (
    SELECT Prod, 
     CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list 
    FROM YourTable 
    GROUP BY Prod 
) 
    WHERE list CONTAINS '|i|' 
    AND NOT list CONTAINS '|f|' 
) 
+0

Запросы abouve были очень полезны при построении того, что я хотел. благодаря – rbkk2016

Смежные вопросы