반응형

출처 : https://stackoverflow.com/questions/24636412/sql-using-case-in-count-and-group-by

group by와 count에서 CASE를 사용하는 SQL

저는 테이블에서 데이터를 분류하기 위해 CASE를 사용하여 그들의 개수를 세었지만 결과가 정확하지 않습니다.

실제 데모는 여기 있습니다.

select DATE(date) as day, count(*),
count(distinct case when name = 'fruit' then 1 else 0 end) as fruits,
count(distinct case when name = 'vege' then 1 else 0 end) as vege,
count(distinct case when name = 'sweets' then 1 else 0 end) as sweets
from food
group by day
with rollup

문제가 CASE에 있는지 또는 문자열 매칭 =에 있는지 확실하지 않습니다. 'sweets'가 없는데 여전히 1로 계산됩니다. 어떤 지적 사항이든 감사합니다.


3 개의 답변 중 1개의 답변

당신의 문제는 NULL이 아닌 모든 결과도 세는데 COUNT를 사용한 것입니다. 당신은 다음처럼 사용했습니다.

COUNT(distinct case when name = 'sweets' then 1 else 0 end)

그래서 이름이 sweets가 아닐 때, 그것을 0으로 세야 합니다. 게다가 DISTINCT를 사용했기 때문에, 하나 또는 두 개의 값을 셀 것입니다. 당신은 SUM을 사용하고 DISTINCT를 삭제하고 ELSE 0을 사용해야 합니다.

SELECT  DATE(date) as day, 
        COUNT(*),
        SUM(CASE WHEN name = 'fruit' THEN 1 ELSE 0 END) as fruits,
        SUM(CASE WHEN name = 'vege' THEN 1 ELSE 0 END) as vege,
        SUM(CASE WHEN name = 'sweets' THEN 1 ELSE 0 END) as sweets
FROM food
GROUP BY DAY
WITH ROLLUP

또는

SELECT  DATE(date) as day, 
        COUNT(*),
        COUNT(CASE WHEN name = 'fruit' THEN 1 ELSE NULL END) as fruits,
        COUNT(CASE WHEN name = 'vege' THEN 1 ELSE NULL END) as vege,
        COUNT(CASE WHEN name = 'sweets' THEN 1 ELSE NULL END) as sweets
FROM food
GROUP BY DAY
WITH ROLLUP

여기는 수정된 sqlfiddle입니다.

반응형
반응형

출처 : http://stackoverflow.com/questions/60208/replacements-for-switch-statement-in-python

파이썬에서 switch 구문을 대체하여 사용하는 방법

입력 index의 값을 기본으로 하여 다른 고정된 값을 리턴하는 파이썬의 함수를 작성하고 싶습니다.

다른 언어에서 저는 switch 또는 case 구문을 사용하고 싶지만 파이썬은 구문을 가지고 있는 것처럼 보이지 않습니다. 이러한 경우 파이썬에서 추천할만한 해결책은 무엇이 있습니까?


30 개의 답변 중 2개의 답변만 추려냄.

원래 아래 답변은 2008년에 작성했습니다. 그 이후로 Python 3.10 (2021)은 Python에서 "switch"의 일류 구현을 제공하는 match-case 구문을 소개하였습니다. 예를 들면 다음처럼 작성가능합니다.

def f(x):
    match x:
        case 'a':
            return 1
        case 'b':
            return 2

match-case 문은 이 간단한 예제보다 훨씬 더 강력합니다.

당신은 dictionary를 사용할 수 있습니다.

def f(x):
    return {
        'a': 1,
        'b': 2,
    }[x]

만약 당신이 default를 사용하고 싶다면, dictionary의 get(key[, default]) 메소드를 사용할 수 있습니다.

def f(x):
    return {
        'a': 1,
        'b': 2,
    }.get(x, 9)    # 9 is default if x not found

위의 답변과 관련하여

http://www.tutorialspoint.com/python/dictionary_get.htm

위 사이트에서 dictionary get 메소드에 대한 내용을 확인하실 수 있습니다.

반응형

+ Recent posts