itsource

Count()에서 조건을 지정할 수 있습니까?

mycopycode 2023. 4. 7. 21:15
반응형

Count()에서 조건을 지정할 수 있습니까?

조건 지정이 가능합니까?Count()위치 열에 "Manager"가 있는 행만 카운트합니다.

count 스테이트먼트에서 하고 싶다, count 스테이트먼트에서 하고 싶다.WHERE매니저와 기타 모두를 동시에 계산해야 하기 때문에 물어봅니다.SELECT(예를 들어Count(Position = Manager), Count(Position = Other))그렇게WHERE이 예에서는 쓸모가 없습니다.

쿼리 자체를 제한할 수 없는 경우where절, 당신은 그 사실을 사용할 수 있습니다.countaggregate는 비표준 값만 카운트합니다.

select count(case Position when 'Manager' then 1 else null end)
from ...

를 사용할 수도 있습니다.sum유사한 방법으로 집약:

select sum(case Position when 'Manager' then 1 else 0 end)
from ...

다른 값도 집약하고 있기 때문에 반환되는 행을 제한하지 않는 경우 다음과 같이 할 수 있습니다.

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount
from ...

같은 열에 매니저, 슈퍼바이저 및 팀장의 값이 있다고 가정하면 다음과 같이 각 값의 카운트를 얻을 수 있습니다.

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount,
    count(case when Position = 'Supervisor' then 1 else null end) as SupervisorCount,
    count(case when Position = 'Team Lead' then 1 else null end) as TeamLeadCount,
from ...

@Guffa의 답변은 훌륭합니다. IF 문장으로 더 깨끗할 수 있음을 지적해 주십시오.

select count(IIF(Position = 'Manager', 1, NULL)) as ManagerCount
from ...

의미에 따라 다르지만, 의미에 대한 다른 해석은 특정 값을 가진 행을 카운트하고 싶지만 다음 값을 제한하고 싶지 않은 위치입니다.SELECT그 행에만...

다음 방법으로 하면SUM()이런 절을 붙여서COUNT(): 예:

SELECT SUM(CASE WHEN Position = 'Manager' THEN 1 ELSE 0 END) AS ManagerCount,
    SUM(CASE WHEN Position = 'CEO' THEN 1 ELSE 0 END) AS CEOCount
FROM SomeTable

Postgres 또는 SQLite를 사용하는 경우 Filter 구를 사용하여 가독성을 향상시킬 수 있습니다.

SELECT
  COUNT(1) FILTER (WHERE POSITION = 'Manager') AS ManagerCount,
  COUNT(1) FILTER (WHERE POSITION = 'Other') AS OtherCount
FROM ...

BigQuery는 또한Countif- 다음 URL에서 다양한 SQL 방언에 대한 지원을 참조하십시오.https://modern-sql.com/feature/filter

SQL 2005 이상을 사용하는 경우 Pivot 키워드를 사용할 수도 있습니다.

상세정보Technet에서

SELECT *
FROM @Users
PIVOT (
    COUNT(Position)
    FOR Position
    IN (Manager, CEO, Employee)
) as p

테스트 데이터 세트

DECLARE @Users TABLE (Position VARCHAR(10))
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('CEO')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')

이것만 말씀하시는 건가요?

SELECT Count(*) FROM YourTable WHERE Position = 'Manager'

만약 그렇다면, 그것은 효과가 있다!

이게 정말 오래된 건 알지만, 난 그게 좋아.NULLIF그런 시나리오에 대한 트릭을 찾았는데, 지금까지 단점은 발견되지 않았습니다.카피&페이스트 가능한 예를 봐주세요.실용적이지는 않지만 사용법을 설명하고 있습니다.

NULLIF퍼포먼스에는 작은 악영향을 줄 수 있지만 서브쿼리보다 빠를 것 같습니다.

DECLARE @tbl TABLE ( id [int] NOT NULL, field [varchar](50) NOT NULL)

INSERT INTO @tbl (id, field)
SELECT 1, 'Manager'
UNION SELECT 2, 'Manager'
UNION SELECT 3, 'Customer'
UNION SELECT 4, 'Boss'
UNION SELECT 5, 'Intern'
UNION SELECT 6, 'Customer'
UNION SELECT 7, 'Customer'
UNION SELECT 8, 'Wife'
UNION SELECT 9, 'Son'

SELECT * FROM @tbl

SELECT 
    COUNT(1) AS [total]
    ,COUNT(1) - COUNT(NULLIF([field], 'Manager')) AS [Managers]
    ,COUNT(NULLIF([field], 'Manager')) AS [NotManagers]
    ,(COUNT(1) - COUNT(NULLIF([field], 'Wife'))) + (COUNT(1) - COUNT(NULLIF([field], 'Son'))) AS [Family]
FROM @tbl

코멘트 감사합니다:-)

다음은 각 배송 컨테이너 내에서 기준에 부합하는 총수와 개수를 모두 포함하는 데이터 세트를 얻기 위해 수행한 작업입니다.그럼 51사이즈보다 X%이상 많은 배송용 컨테이너가 몇개 있습니까?

select
   Schedule,
   PackageNum,
   COUNT (UniqueID) as Total,
   SUM (
   case
      when
         Size > 51 
      then
         1 
      else
         0 
   end
) as NumOverSize 
from
   Inventory 
where
   customer like '%PEPSI%' 
group by
   Schedule, PackageNum

(Facebook의) PrestoDB SQL에는 다음과 같은 단축키가 있습니다.

https://prestodb.io/docs/current/functions/aggregate.html

count_if(x) → bigint

TRUE 입력값의 수를 반환합니다.이 함수는 카운트(CASE WHEN x THEN 1 END)와 동일합니다.

SELECT COUNT(*) FROM bla WHERE Position = 'Manager'

MySQL에서는 부울식은 0 또는1로 평가되므로 다음 집약이 동작합니다.

select sum(Position = 'Manager') as ManagerCount
from ...

간단한 WHERE 절을 사용하여 레코드 수만 선택할 수 있다고 생각합니다.

언급URL : https://stackoverflow.com/questions/1400078/is-it-possible-to-specify-condition-in-count

반응형