복붙노트

[SQL] 조인 된 테이블 C 럼의 구별 합계를 얻기

SQL

조인 된 테이블 C 럼의 구별 합계를 얻기

나는 여기에 문제가있다, 나는 쉬운 솔루션이 바라고 있어요. 나는 가능한 한 간단하게이를 만들기 위해 노력하고 있습니다 :

해결법

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

    1.부질없는 결과를 얻으려면, 당신은 고급 윈도우 함수의 속임수에 의지해야한다 :

    부질없는 결과를 얻으려면, 당신은 고급 윈도우 함수의 속임수에 의지해야한다 :

    SELECT sum(count(*))       OVER () AS tickets_count
          ,sum(min(a.revenue)) OVER () AS atendees_revenue
    FROM   tickets   t
    JOIN   attendees a ON a.id = t.attendee_id
    GROUP  BY t.attendee_id
    LIMIT  1;
    

    SQL 바이올린.

    이 문제를 이해하는 열쇠는 쿼리의 이벤트 순서입니다 :

    집계 함수 -> 윈도우 함수 -> DISTINCT -> LIMIT

    자세한 내용은 여기 :

    단계에 의해 단계 :

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

    2.간단한 부문에 대해 무엇 :

    간단한 부문에 대해 무엇 :

     Select count(tickets.*) as tickets_count
     , sum(attendees.revenue) / count(attendees.id) as atendees_revenue
     from tickets LEFT OUTER JOIN attendees ON attendees.id = 
     tickets.attendee_id;
    

    이것은 등등 중복, 삼중를 처리해야합니다.

  3. ==============================

    3.당신이이 작업을 수행하는 많은 방법이 있고 난 당신의 질문을 이해한다면 올바르게 그것을해야한다, 아주 가까이 실제로 있었다 :

    당신이이 작업을 수행하는 많은 방법이 있고 난 당신의 질문을 이해한다면 올바르게 그것을해야한다, 아주 가까이 실제로 있었다 :

    SELECT
       COUNT(*) AS ticketsCount,
       SUM(DISTINCT attendees.revenue) AS revenueSum
    FROM
       tickets
       LEFT JOIN attendees ON
          attendees.id = tickets.attendee_id
    
  4. ==============================

    4.이전 대답은 거의 정확합니다. 당신은 경우 동일한 수익에서 잘 별개의 작업을 확인해야합니다. 당신의 ID가 숫자 유형이있는 경우이 정말 간단한 문제를 해결할 수 있습니다 :

    이전 대답은 거의 정확합니다. 당신은 경우 동일한 수익에서 잘 별개의 작업을 확인해야합니다. 당신의 ID가 숫자 유형이있는 경우이 정말 간단한 문제를 해결할 수 있습니다 :

    SELECT
      COUNT(*) AS ticketsCount,
      SUM(DISTINCT attendees.id + attendees.revenue) - SUM(DISTINCT attendees.id) AS revenueSum
    FROM
      tickets
    LEFT JOIN attendees ON
      attendees.id = tickets.attendee_id
    
  5. from https://stackoverflow.com/questions/13169367/get-the-distinct-sum-of-a-joined-table-column by cc-by-sa and MIT license