Я пытаюсь подсчитать с помощью этого запроса. Я хотел бы, чтобы он показывал мне все nameHost (хотя счетчик был 0), но с этим запросом nameHost, счетчик которого равен 0, не показывает мне nameHost. Не могли бы вы мне помочь, пожалуйста?

 select a.nameHost, count(b.job_name) as cuenta
                from jobsDefinition b
                         right join cmdmzpre.nodes a
                        on b.node_id in (a.nodeid,a.nameHost) 
                         where b.app not like 'UNPLAN' group by a.nameHost order by a.nameHost desc;

Пример таблиц:

nodes         
=======
nameHost        nodeid
---------       -------
a               a
b               b
b               f
e               g



jobsDefinition
================
node_id        job_name
----------     -----------
a               fruit
b               apple
c               iron
a               banana
f               orange

Результатом будет:

a 2 (fruit,banana)
b 2 (apple,orange)
e 0
-1
user8957934 22 Ноя 2017 в 11:48

1 ответ

Лучший ответ

Как упоминалось в моем комментарии, From your dataset, **a** should be **2**.

Используйте этот запрос:

  ---Table Data start ----

WITH nodes (nameHost, nodeid)
     AS (SELECT 'a', 'a' FROM DUAL
         UNION ALL
         SELECT 'b', 'b' FROM DUAL
         UNION ALL
         SELECT 'b', 'f' FROM DUAL
         UNION ALL
         SELECT 'e', 'g' FROM DUAL),
     jobdef (node_id, job_name)
     AS (SELECT 'a', 'fruit' FROM DUAL
         UNION ALL
         SELECT 'b', 'apple' FROM DUAL
         UNION ALL
         SELECT 'c', 'iron' FROM DUAL
         UNION ALL
         SELECT 'a', 'banana' FROM DUAL
         UNION ALL
         SELECT 'f', 'orange' FROM DUAL)
  --Table data end---
  --Actual Query
  SELECT n.namehost,
         COUNT (jd.node_id) AS Cnt,
         LISTAGG (jd.job_name, ',') WITHIN GROUP (ORDER BY 1) JB_NM
    FROM nodes n 
    LEFT JOIN jobdef jd 
    ON n.nodeid = jd.node_id
GROUP BY n.namehost
ORDER BY namehost;
0
XING 22 Ноя 2017 в 13:00