2014-12-07 5 views
0

я в настоящее время этот вопрос:Включить 0 значения в группе в SQL

SELECT c.id, COUNT(*) AS num 
FROM castle c, resource r 
WHERE db2gse.ST_Contains(r.geom, c.geom) = 1 
GROUP BY c.id; 

Это даст мне замки и их количество ресурсов, если количество ресурсов 1 или выше. Теперь я также хочу, чтобы в замках не было ресурсов.

Замок имеет идентификатор и геометрию, ресурс имеет идентификатор и геометрию.

Поэтому я хочу, чтобы этот запрос дал мне все замки и их количество ресурсов, даже если количество ресурсов равно 0. Вы можете увидеть, есть ли у замка определенный ресурс, проверяя местоположение замка внутри ресурса , проверяя, содержит ли геометрия ресурса геометрию замка.

ответ

2

Использование явного join синтаксиса, так что вы можете использовать left join:

SELECT c.id, COUNT(r.<col>) AS num 
FROM castle c LEFT JOIN 
    resource r 
    ON db2gse.ST_Contains(r.geom, c.geom) = 1 
GROUP BY c.id; 

Простое правило: Никогда не используйте запятые в предложении from.

EDIT:

Вам нужен столбец в таблице resource для подсчета, но geom не может работать (в зависимости от его типа). Если у вас нет, то фраза запрос, как это:

select c.id, 
     (select count(*) 
     from resource r 
     where db2gse.ST_Contains(r.geom, c.geom) = 1 
     ) as num 
from castle c; 
+0

Запуск запроса дает мне ошибку: SQL0245N Вызов рутинного «COUNT» является неоднозначным. Аргумент в Позиция «1» не подходит. SQLSTATE = 428F5 –

+0

@ThomasVanhelden. , , Есть ли другой столбец в таблице ресурсов, который вы можете использовать? –

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