문제

배경:

MySQL에 정의 된 "롤업"쿼리가 있습니다.

    SELECT      
        case TRIM(company)
            when 'apple'        THEN 'AAPL'
            when 'microsoft'    THEN 'MSFT'
            else '__xx__'
        END as company        

        ,case TRIM(division)
            when 'hardware'         THEN Trim(division)
            when 'software'         THEN Trim(division)
            else '__xx__'
        END as division

        ,concat( '$' , format(sum(trydollar),0))    as  dollars
    FROM        pivtest
    GROUP BY    
        company, division with rollup        

그리고이 출력을 생성합니다.

AAPL;hardware;$279,296
AAPL;software;$293,620
AAPL;__xx__;$572,916
MSFT;hardware;$306,045
MSFT;software;$308,097
MSFT;__xx__;$614,142
__xx__;__xx__;$1,187,058

이전에 MySQL에서 "롤업"쿼리를 사용한 경우 소스 테이블의 구조를 유추 할 수 있습니다.

의문:

MySQL 의이 원시 출력을 감안할 때 다음과 같은 "트리"구조를 얻는 가장 쉬운 방법은 무엇입니까?

AAPL
    hardware;$279,296
    software;$293,620
        Total; $572,916
MSFT
    hardware;$306,045
    software;$308,097
        Total;$614,142
Total    
            $1,187,058
도움이 되었습니까?

해결책

가장 쉬운 사용자가 MySQL의 출력을 수신하고 보여주기 위해 사용하는 모든 클라이언트 프로그램에서 수행하는 것입니다. ~ 아니다 데이터 계층에서 프리젠 테이션 레이어 기능을 구현하는 것이 가장 쉽습니다!-) 따라서 클라이언트 프로그램에 어떤 언어가 있는지 알려 주시면 도움을 줄 수 있습니다 ...

편집 : 원래 Asker의 요청에 따라 간단한 Python Client-Side 솔루션 제공.

Python의 DB API를 사용하면 DB 쿼리의 결과가 가장 단순히 튜플 목록으로 볼 수 있습니다. 따라서 필요에 따라 해당 결과를 포맷하는 기능이 있습니다.

def formout(results):
  marker = dict(__xx__='   Total')
  current_stock = None
  for stock, kind, cash in results:
    if stock != current_stock:
      print marker.get(stock, stock).strip()
      current_stock = stock
    if kind in marker and stock in marker:
      kind = ' '*8
    print '    %s;%s' % (marker.get(kind, kind), cash)

marker 특수 마커를 매핑하는 사전입니다 '__xx__' 출력의 원하는 문자열로 ( "중간"총계를 위해 적절하게 왼쪽에 배치하므로 최종 "Grand Total"을 인쇄 할 때 I .strip() 그 공백이 꺼져). 또한 처음 두 열 모두 마커 인 특수 사례를 확인하는 데 사용합니다 (이 경우 두 번째 열은 대신 공백으로 바뀌어야하기 때문에). Python 관용구에 대한 추가 설명과 필요한 사용에 대해 의견을 보내 주시기 바랍니다.

다음은 제공된 데이터를 사용 하여이 기능을 호출 할 때 보는 출력입니다 (각각 3 개의 문자열 7 개의 튜플 목록으로 바뀌 었음).

AAPL
    hardware;$279,296
    software;$293,620
       Total;$572,916
MSFT
    hardware;$306,045
    software;$308,097
       Total;$614,142
Total
            ;$1,187,058

공간 정렬은 내가 질문에서 볼 수있는 것과 동일하지 않습니다 (이것은 얼마나 많은 공간이 어디에 있는지에 대해 약간 일치하지 않음) 그러나 조정하기가 쉽게 만들고 싶은 것에 충분히 가까워지기를 바랍니다. 이것은 당신의 정확한 요구에 따라 (어쨌든 Python을 PHP로 변환해야하기 때문에, 공간 조정은 희망적으로 가장 적은 것이어야합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top