programing

결과 그룹화 없이 SUM() 사용

padding 2023. 9. 25. 22:24
반응형

결과 그룹화 없이 SUM() 사용

저는 이미 (이 글을) 읽었지만, 그것을 제 특정 문제에 적용할 방법을 찾지 못했습니다.알고있어요SUM()집합 함수인데 이렇게 사용하지 않는 것은 말이 안 되지만 이 특정한 경우에는SUM()모든 행을 유지하면서 모든 결과를 확인할 수 있습니다.

여기 표가 있습니다.

--ID-- --amount--
  1        23
  2        11
  3        8
  4        7

해야합니다.SUM()양, 그러나 모든 기록을 유지하므로 출력은 다음과 같습니다.

--ID-- --amount--
  1        49
  2        49
  3        49
  4        49

이 쿼리를 사용했지만 각 행만 합칠 뿐 모든 결과를 함께 집계하는 것은 아닙니다.

SELECT 
    a.id,
    SUM(b.amount)

FROM table1 as a 
JOIN table1 as b ON a.id = b.id
GROUP BY id

없는.SUM()한 줄만 돌려주지만 신분증은 유지해야 합니다...

참고: 네, 이것은 꽤 기본적인 예이고 여기서 이것을 하기 위해 php를 사용할 수 있습니다. 하지만 분명히 테이블이 더 크고 행과 열이 더 많지만 중요한 것은 아닙니다.

SELECT a.id, b.amount
FROM table1 a
CROSS JOIN
(
    SELECT SUM(amount) amount FROM table1
) b

표에 있는 모든 행의 합 값을 다음 행에 대한 데카르트 조인을 수행해야 합니다.id. 하위 선택의 결과가 하나뿐이므로 (49), 기본적으로 각각의 공간에 부착됩니다.id.

와 함께MS SQL사용가능OVER()

 select id, SUM(amount) OVER()
 from table1;

select id, SUM(amount) OVER()
from (
  select 1 as id, 23 as amount
  union all
  select 2 as id, 11 as amount
  union all
  select 3 as id, 8 as amount
  union all
  select 4 as id, 7 as amount
) A

enter image description here

--- OVER PARTITION ID

PARTITION BY당신이 하고 싶을 때 매우 유용한 것.SUM()예를 들어 매월 또는 분기별 보고서 판매 또는 연간...(참고 사항distinct모든 행에 대해 수행됩니다.)

 select distinct id, SUM(amount) OVER(PARTITION BY id) as [SUM_forPARTITION]
 from (
     select 1 as id, 23 as amount
     union all
     select 1 as id, 23 as amount
     union all
     select 2 as id, 11 as amount
     union all
     select 2 as id, 11 as amount
     union all
     select 3 as id, 8 as amount
     union all
     select 4 as id, 7 as amount
) OverPARTITIONID

enter image description here

하위 쿼리를 사용하여 원래 테이블을 합에 연결합니다.

SELECT * FROM table1, (SELECT SUM(amount) FROM table1 AS amount) t

이거 하나면 돼요.sum()쿼리를 수행하면 OK:

SELECT a.id, b.amount
FROM table1 a
cross join (SELECT SUM(amount) as amount FROM table1 AS amount) b

만약 다른 사람이 같은 문제를 가지고 있고 가입하지 않고 우리는 다음을 할 수 있습니다.

select *
,totcalaccepted=(select sum(s.acceptedamount)  from cteresult s)
, totalpay=(select sum(s.payvalue)  from cteresult s)     
from cteresult  t
end

전체 가입 사용 -

합계가 필요한 경우amount현장에서tableB모든 데이터를 저장할 수 있습니다.tableAid match 대신에

  SELECT  a.amount, b.* FROM tableB b 
  full join (
      select id ,SUM(amount) as amount FROM tableA 
      where id  = '1' group by id
  ) a 
  on a.id = b.id where a.id ='1' or b.id  = '1' limit 1;

언급URL : https://stackoverflow.com/questions/11357640/using-sum-without-grouping-the-results

반응형