programing

SQL 쿼리 결과를 보고서 양식 테이블에 출력하는 방법은 무엇입니까?

padding 2023. 10. 10. 20:09
반응형

SQL 쿼리 결과를 보고서 양식 테이블에 출력하는 방법은 무엇입니까?

테이블 필드는 다음과 같습니다.

Invitations (user_id, type, created_at, completed_at)

저는 현재 아래의 쿼리를 실행하고 수동으로 계산하여 지난 주 초대 대화율을 얻을 수 있습니다.

SELECT * 
FROM invitations
WHERE created_at >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND created_at < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
AND user_id != 1
AND type = 'email'
ORDER BY completed_at, created_at

SQL을 사용하면 더 많은 보고서를 출력할 수 있습니까?반환되는 내용:

LAST WEEK | Total Invitations | Invitations Completed | % Conversion    
          | 100               | 50                    | 50%  
TWO WEEKS | Total Invitations | Invitations Completed | % Conversion    
          | 100               | 60                    | 60%  

SQL로 이런 것이 가능합니까, 아니면 애플리케이션 로직으로 이런 것을 만들어야 합니까?

아마도 당신은 다음을 사용해 집계하고 싶을 것입니다.count()그리고.UNION ALL.

SELECT 'LAST WEEK' `Period`,
       count(created_at) `Total Invitations`,
       count(completed_at) `Invitations completed`,
       concat(count(completed_at) / count(created_at) * 100, '%') `% Conversion` 
       FROM invitations
       WHERE created_at >= curdate() - INTERVAL dayofweek(curdate()) + 6 DAY
             AND created_at < curdate() - INTERVAL dayofweek(curdate()) - 1 DAY
             AND user_id <> 1
             AND type = 'email'
UNION ALL
SELECT 'TWO WEEKS' `Period`,
       count(created_at) `Total Invitations`,
       count(completed_at) `Invitations completed`,
       concat(count(completed_at) / count(created_at) * 100, '%') `% Conversion` 
       FROM invitations
       WHERE created_at >= curdate() - INTERVAL dayofweek(curdate()) + 13 DAY
             AND created_at < curdate() - INTERVAL dayofweek(curdate()) - 1 DAY
             AND user_id <> 1
             AND type = 'email';

count(completed_at)행만 계산합니다. 여기서completed_atnull이 아닙니다.내가 추측하기엔completed_at초대가 완료되지 않은 경우에만 null입니다.count(created_at)아날로그로 작동합니다.하지만 해당 열에 null 값이 없다고 가정합니다(만약 그런 값이라면 해당 행은 의 조건과 일치하지 않습니다).WHERE조항이 있어서 그들은 심지어 개표대상자도 아닙니다.)UNION ALL(어쨌든 그 안에 있지 않은 중복을 제거하지 않고) 두 결과 집합을 최소한 다음과 같이 통합합니다.Period차이가 있습니다.

언급URL : https://stackoverflow.com/questions/51528558/how-to-output-the-results-of-a-sql-query-into-a-report-form-table

반응형