>

쿼리 결과 인t테이블이 있습니다 :

user | value
A    | 1
B    | 2
A    | 1
B    | 4

다음 표를 계산하고 싶습니다 :

user | sum(value) | percentage
A    | 2          | 0.25
B    | 6          | 0.75

비율을 얻는 것은 다소 간단합니다-@ lad2025 덕분에

select sum(value)/(select sum(value) from t) 
from t
group by user

문제는t이 이미 다소 큰 쿼리의 결과라는 점입니다. 따라서 t의 이름을 반복하지 않고이 작업을 수행하고 싶습니다. 보기를 만들지 않고도 가능합니까?


  • 답변 # 1

    다음을 사용할 수 있습니다 :

    SELECT `user`, SUM(`value`) AS s,
           SUM(`value`)/(SELECT NULLIF(SUM(value),0) FROM t) AS percentage
    FROM t
    GROUP BY `user`;
    
    

    경고! 모든 값이 positivie 또는 0이라고 가정했습니다.

    DBFiddle 데모

    <시간>

    수정:

    와이즈 비즈

    MySQL 8.0 또는 MariaDB를 사용하는 경우

    The problem is that t is already the result of a rather big query, so I'd like to do this without repeating the name of t.

    를 사용할 수 있습니다

    SUM() OVER()
    
    

    DBFiddle 데모 2

    또는 CTE를 사용하십시오 :

    SELECT `user`, SUM(`value`) AS s, SUM(`value`)/SUM(SUM(`value`)) OVER()
    FROM t
    GROUP BY `user`;
    
    
    WITH t AS ( -- super complex query ) SELECT `user`, SUM(`value`) AS s, SUM(`value`)/(SELECT NULLIF(SUM(value),0) FROM t) AS percentage FROM t GROUP BY `user`;

  • 이전 javascript - Visual Studio에서 데이터베이스에서 데이터를 가져 오는 동안 HTML 행을 클릭 가능하게 만드는 방법 (C # 사용)
  • 다음 amqp - 내 작업이 왜 헤더 교환의 모든 RabbitMQ 대기열과 일치합니까?