>

마침내 두 개의 SQL 합계 쿼리 결과를 합산하는 데 성공했습니다. 이 사람을위한 작은 단계 :)

질문은 코드의 마지막 문자 (Z)와 관련이 있습니다 :

SELECT SUM(hr)
FROM   (SELECT SUM(amount) AS hr
        FROM   Try_again.dbo.tuesday_practice_database
        WHERE  account_name LIKE 'concessions'
        UNION
        SELECT SUM(amount) AS hr
        FROM   Try_again.dbo.tuesday_practice_database
        WHERE  account_name LIKE 'salaries')Z

닫는 괄호 뒤에 무언가가 없으면 코드가 작동하지 않습니다.

왜 그런지 궁금하고 왜 다음에 문자가 있어야하는지 궁금합니다.

캐릭터가 무엇이든 상관없이 코드가 작동합니다. 하지만 비워두면 코드가 깨집니다.

감사합니다

  • 답변 # 1

    SELECT sum(hr) 
    FROM
    (
       Select sum(amount) as hr 
       from Try_again.dbo.tuesday_practice_database 
       where account_name like 'concessions'
       union 
       Select sum(amount) as hr 
       from Try_again.dbo.tuesday_practice_database 
       where account_name like 'salaries'
    ) z
    
    

    더 잘 이해하려면 위의 버전의 검색어를보십시오.동일한 코드이며, 현재 상황을 설명하기 위해 다시 포맷되었습니다. 눈치 채면 부모 FROM  절은 하위 쿼리에서 데이터를 검색합니다. 이러한 맥락에서 SQL은 하위 쿼리에 어떤 종류의이름이 있어야하므로 z  해당 요건을 충족하기 위해별칭으로 추가됩니다. 원하는 것은 무엇이든 넣을 수 있지만 이름은 중요하지 않으므로 단일 문자 자리 표시자는 괜찮습니다.

    다음 쿼리와 같습니다 :

    select * from table1 as z
    
    

    그건 그렇고, 당신은 당신의 LIKE 에 와일드 카드를 사용하지 않았습니다  절! 다음과 같이 쿼리를 다시 작성해야한다고 생각합니다.

    select sum(hr) from 
    (
       Select sum(amount) as hr from Try_again.dbo.tuesday_practice_database 
       where account_name like '%concessions&'
       union all
       Select sum(amount) as hr from Try_again.dbo.tuesday_practice_database 
       where account_name like '%salaries%'
    ) AS z
    
    

    와일드 카드를 사용하지 않으려면 LIKE 를 사용하지 않아야합니다   IN 사용  대신이 간단한 것에 다시 쓰십시오 :

    Select sum(amount) from Try_again.dbo.tuesday_practice_database 
    where account_name in('concessions', 'salaries')
    
    

  • 답변 # 2

    이 작업을 수행하십시오 :

    SELECT SUM(amount) as hr
    FROM Try_again.dbo.tuesday_practice_database
    WHERE account_name IN ('concessions', 'salaries')
    
    

    기존 코드에는 버그가 있으며 두 개의 SUM ()이 같은 양이면 통합합니다. UNION ALL 로이 문제를 해결할 수도 있습니다  그냥 UNION 대신 그러나 LIKE 이후  조건에 % 와 같은 자리 표시자가 없습니다.  또는 _  우리는 하나의 IN() 로이 모든 일을 더 잘하고 단순화 할 수 있습니다.  하위 쿼리가 필요없는 상태입니다.

    이제 경기에서 더 많은 차이를 허용하려면 (예 : LIKE '%concessions%' )  그리고 LIKE '%salaries%' ) 그런 다음 UNION ALL  더 도움이됩니다 ... 그냥 % 를 선도하는 경고   LIKE 의 자리 표시 자  성능은매우 나쁘다이며 가능하면 피해야합니다. 종종 이것은 AccountCategories 와 같은 이름의 테이블을 추가하는 것과 같은 방식으로 스키마를 변경하는 것을 의미합니다.  각 계정을 검색어에서 정확하게 타겟팅 할 수있는 특정 카테고리로 그룹화합니다.

    그러나 그 모든 단계는 실제 질문입니다. 그 z 는 무엇입니까?  캐릭터?

    이 경우별칭입니다. 하위 쿼리를 사용하여 두 개의 작은 쿼리를 통합합니다. 특정 상황에서 SQL 언어에는 하위 쿼리에 이름이 있어야합니다. 여기에는 하위 쿼리 (유도 된 테이블)를 FROM 의 대상으로 사용하는 것이 포함됩니다. JOIN 또는 APPLY  표현. 다시는 참조되지 않으므로 원하는 이름을 사용할 수 있습니다. 쿼리 기능에는 문제가되지 않습니다. 따라서 z 와 같은 간단한 단일 문자 자리 표시 자 충분합니다.

  • 이전 javascript - 첫 TD 만 테이블 검색
  • 다음 c# - 각각에 대한 DrawItem 이벤트가있는 동적 목록 상자