2014-02-11 3 views
0

여기에 바이올린 : http://sqlfiddle.com/#!3/5945f/1isnull by Group : 어떤 문제가 있으며 더 나은 대안이 있습니까?

나는 0과 null 값을 가지고 있으며, 나는 그들에게 별개가되고 싶지 않다. 나는 그들이 동일하게 대접 받기를 원한다. 따라서 (2, 0)과 (2, null)은 (2, 0) 또는 (2, null)로 그룹화되어야하며 중요하지 않습니다. 나는 바이올린에서 제공 한 해결책이 효과가 있다는 것을 알았습니다. 그러나 그렇게하는 것이 좋을까요? 또한 select에서 isnull()을 두 번째로 쓰지 않는 방법이 있습니까?

+0

. . 당신의 대답은 괜찮습니다. 나는이 기능을위한 ANSI 표준 함수이기 때문에'coalesce()'(일반적으로)를 사용하는 것을 선호한다. –

+0

덕분에,이 http://msdn.microsoft.com/en-us/library/ms190349.aspx를 읽었으며 isnull이 더 나은 대안 인 것처럼 보입니다. 단 한 번만 평가 되었기 때문입니다. – dhblah

+0

. . 첫 번째 인수가 복잡한 경우 (예 : 하위 쿼리)가 더 좋습니다. 다른 상황에서는 성능 차이가 중요하지 않습니다. Microsoft는이 문제를 명확하게 문서화하는 대신 실제로 수정하기를 희망합니다. –

답변

0

내가하는 방식에 문제가 보이지 않습니다.

두 번째 질문 : 일부 DBMS (예 : SQL Anywhere)는 group by에서 별칭을 사용할 수 있지만 일부 (Oracle 및 SQL Server와 같은)는 별칭을 사용할 수 없습니다. DBMS의 그룹에서 aliasses를하여 사용할 수있는 경우, 당신은 쓸 수 :

select id, isnull(price, 0) as pr 
    from foo 
group by id, pr; 
+0

네, 아마도 SQL 서버와 비슷한 것이 있다고 생각하지만, 두 번째 isnull을 작성해야합니다. 감사. – dhblah

0

당신은 하위 쿼리의 비용으로 두 번째 ISNULL 제거 할 수 있습니다.

select id, pr 
from 
    (select id, isnull(price, 0) as pr from foo) t 
group by id, pr; 
관련 문제