programing

단일 그룹 그룹 함수가 아님

iphone6s 2023. 10. 9. 22:23
반응형

단일 그룹 그룹 함수가 아님

기본적으로 다음과 같이 보이는 테이블이 있습니다.

TBL_USER
user_id - number
user_name - varchar

TBL_STUFF
stuff_id - number
stuff_user_id - number

나는 그들이 가지고 있는 "물건"의 수를 포함한 모든 사용자 정보를 조회하고 싶습니다.나는 이런 시도를 하고 있었습니다.

select user_id, user_name, count(stuff_id) 
  from tbl_user
  left outer join tbl_stuff on stuff_user_id = user_id
 where user_id = 5;

"단일 그룹 함수가 아닙니다"라는 오류가 나타납니다.

제가 해야 할 다른 방법이 있을까요?

음, 당신은 그룹 함수를 놓치고 있습니다 ;-)

시도해 보기:

select user_id, user_name, count(stuff_id) 
from tbl_user left outer join tbl_stuff on stuff_user_id = user_id
where user_id = 5
group by user_id, user_name;

마지막 줄은.group byOracle이 user_id 및 user_name 조합이 동일한 모든 행을 카운트하도록 지시하는 절입니다.

다음과 같이 할 수도 있습니다.

select 
  user_id, 
  user_name, 
  (
    SELECT
        COUNT(*)
    FROM
        tbl_stuff
    WHERE 
        stuff_user_id = tbl_user.user_id

  ) AS StuffCount, 
from 
   tbl_user
where 
   user_id = 5;

의견 중 하나는 에 존재하는 모든 필드를 포함하고 싶지 않다는 것입니다.GROUP BY

@아리온은 동일한 값을 제공하는 상관-하위 쿼리 재인자를 게시했습니다.

다음 쿼리는 대신 표준(상관 없음) 하위 쿼리(인라인)를 사용합니다.이 인라인 구조를 사용하면 상관 관계가 있는 하위 쿼리 등가를 수행할 수 있기 때문입니다.하지만, 또한, 저는 그것들이 유지하기 더 쉽다고 생각하기 때문입니다.

WITH
  stuff_count
AS
(
  SELECT
    stuff_user_id  AS user_id,
    COUNT(*)       AS val
  FROM
    tbl_stuff
  GROUP BY
    stuff_user_id
)
SELECT
  tbl_user.user_id,
  tbl_user.user_name,
  stuff_count.val
FROM
  tbl_user
LEFT JOIN
  stuff_count
    ON stuff_count.user_id = tbl_user.user_id
WHERE
  tbl_user.user_id = 5;

참고: 플랜이 생성되면 전체 테이블이 아닌 user_id 필요한 서브쿼리만 실행됩니다 ;)

언급URL : https://stackoverflow.com/questions/10210320/not-a-single-group-group-function

반응형