복붙노트

[SQL] LEFT와 쿼리는 0의 카운트 행을 반환하지 JOIN

SQL

LEFT와 쿼리는 0의 카운트 행을 반환하지 JOIN

나는 왼쪽은 PostgreSQL의에 참여하여 모든 조직의 수를 반환하려면 다음을 얻기 위해 노력하고 있어요,하지만 작동하지 않는 이유를 알아낼 수 없습니다 :

  select o.name as organisation_name,
         coalesce(COUNT(exam_items.id)) as total_used
  from organisations o
  left join exam_items e on o.id = e.organisation_id
  where e.item_template_id = #{sanitize(item_template_id)}
  and e.used = true
  group by o.name
  order by o.name

병합을 사용하면 작동하지 않습니다. 내 지혜의 끝에서 해요! 어떤 도움을 확실히 이해할 수있을 것입니다!

작동하지 않는 것을 명확히하기 위해, 쿼리가 0보다 카운트 이상을 보유하고있는 조직에 대한 값을 반환하는 순간에 나는 횟수에 관계없이 모든 조직의 라인을 반환하고 싶습니다.

표 정의 :

TABLE exam_items
  id serial NOT NULL
  exam_id integer
  item_version_id integer
  used boolean DEFAULT false
  question_identifier character varying(255)
  organisation_id integer
  created_at timestamp without time zone NOT NULL
  updated_at timestamp without time zone NOT NULL
  item_template_id integer
  stem_id integer
  CONSTRAINT exam_items_pkey PRIMARY KEY (id)

TABLE organisations
  id serial NOT NULL
  slug character varying(255)
  name character varying(255)
  code character varying(255)
  address text
  organisation_type integer
  created_at timestamp without time zone NOT NULL
  updated_at timestamp without time zone NOT NULL
  super boolean DEFAULT false
  CONSTRAINT organisations_pkey PRIMARY KEY (id)

해결법

  1. ==============================

    1.이 작업을해야합니다 :

    이 작업을해야합니다 :

    SELECT o.name AS organisation_name
         , COUNT(e.id) AS total_used
    FROM   organisations   o
    LEFT   JOIN exam_items e ON e.organisation_id = o.id 
                            AND e.item_template_id = #{sanitize(item_template_id)}
                            AND e.used = true
    GROUP  BY o.name
    ORDER  BY o.name;
    

    굵게 강조 광산.

  2. ==============================

    2.그것은 명확하게하기 위해,

    그것은 명확하게하기 위해,

    중요한 라인은 SOME_TABLE에서 NULL 값을 처리 할 GROUP BY MAIN_TABLE입니다

    SELECT COUNT(ST.ID)
    FROM MAIN_TABLE MT
    LEFT JOIN SOME_TABLE ST ON MT.ID = ST.MT_ID
    
    GROUP BY MT.ID -- this line is a must
    
  3. from https://stackoverflow.com/questions/15467624/query-with-left-join-not-returning-rows-for-count-of-0 by cc-by-sa and MIT license