SOQL 기본문법(06)

HAVING


Tue, May 28, 2019 written by Yong-Jin

HAVING

집계 함수가 반환하는 결과를 필터링

  SELECT LeadSource, COUNT(Name)
    FROM Lead
GROUP BY LeadSource
  HAVING COUNT(Name) > 100

  SELECT Name, Count(Id)
    FROM Account
GROUP BY Name
  HAVING Count(Id) > 1

 

HAVING을 사용할 때의 고려 사항

( OK )
  SELECT LeadSource, COUNT(Name)
    FROM Lead
GROUP BY LeadSource
  HAVING COUNT(Name) > 100and LeadSource > 'Phone'

( Error )
  SELECT LeadSource, COUNT(Name)
    FROM Lead
GROUP BY LeadSource
  HAVING COUNT(Name) > 100and City LIKE 'San%'
 

TYPEOF (BATA)

TYPEOF는 다형성 관계를 포함하는 데이터를 쿼리 할 때 SOQL 쿼리의 SELECT 문에서 사용할 수있는 선택적 절입니다.

// 예제 1
SELECT Name 
FROM Account
WHERE CreatedById IN 
    (
    SELECT 
        TYPEOF Owner
            WHEN UserTHEN Id
            WHEN GroupTHEN CreatedById
        END
    FROM CASE
    )

// 예제 2
SELECT
    TYPEOF What
        WHEN Account THEN Phone
        ELSE Name
    END
FROM Event
WHERE CreatedById IN
    (
    SELECT CreatedById
    FROM Case
    )

// 예제 3
SELECT
    TYPEOF What
        WHEN Account THEN Phone, NumberOfEmployees
        WHEN Opportunity THEN Amount, CloseDate
        ELSE Name, Email
    END
FROM Event
 

FORMAT()

SELECT 절에 FORMAT을 사용하면 표준 및 사용자 정의 숫자, 날짜, 시간 및 통화 필드에 현지화 된 서식을 적용 할 수 있습니다.

// 예제 1
SELECT FORMAT(amount) Amt,
       format(lastModifiedDate) editDate
FROM Opportunity

Amt = “AED 1,500.000000 (USD 1,000.00)”
editDate = “7/2/2015 3:11 AM”

// 예제 2
SELECT Id, LastModifiedDate, FORMAT(LastModifiedDate) formattedDate FROM Account

SELECT amount,
       FORMAT(amount) FORMAT_Amt,
       convertCurrency(amount) convertedCurrency,
       FORMAT(convertCurrency(amount)) FORMAT_convertedCurrency
FROM Opportunity where id = '12345'

Amount = “34500000”
FORMAT_Amt= “KRW 34,500,000.00”
convertedCurrency =“34500000”
FORMAT_convertedCurrency = “KRW 34,500,000.00”

// 예제 3
SELECT FORMAT(MIN(closedate)) Amt FROM opportunity
 

FOR VIEW

SOQL 쿼리에서 FOR VIEW 절을 사용하여 개체를 마지막으로 본 시간에 대한 정보로 개체를 업데이트 할 수 있습니다.

  • 이 절을 쿼리와 함께 사용하면 다음 두 가지 작업이 수행됩니다.
    • 검색된 레코드의 LastViewedDate 필드가 업데이트됩니다.
    • 검색된 레코드에 대해 최근에 본 데이터를 반영하기 위해 레코드가 RecentlyViewed 개체에 추가됩니다.
 SELECT Name, ID FROM Contact  LIMIT1FORVIEW
 

FOR REFERENCE

FOR REFERENCE는 모바일 응용 프로그램 또는 사용자 정의 페이지에서와 같이 사용자 정의 인터페이스에서
레코드를 참조 할 때 Salesforce에 알리기 위해 SOQL 쿼리에 사용할 수있는 선택적 절입니다.

  • 이 절을 쿼리와 함께 사용하면 다음 두 가지 작업이 수행됩니다.
    • LastReferencedDate 필드는 검색된 레코드에 대해 업데이트됩니다.
    • 검색된 각 레코드에 대해 최근 참조 된 데이터를 반영하기 위해 레코드가 RecentlyViewed 개체에 추가됩니다.
 SELECT Name, ID FROM Contact  LIMIT1FOR REFERENCE
 

FOR UPDATE

Apex에서 경쟁 업데이트 및 기타 스레드 안전 문제를 방지하기 위해 FOR UPDATE를 사용하여
sObject 레코드가 업데이트되는 동안 해당 레코드를 잠글 수 있습니다.
잠금을 사용하는 모든 SOQL 쿼리에서 ORDER BY 키워드를 사용할 수 없습니다.

Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE];