2010-03-30 3 views
2

웹 사이트에 작은 종류의 로그 시스템을 사용하고 있으며 여러 가지 작업을 수행하려는 쿼리에 어려움을 겪고 있습니다. 중첩 된/하위 쿼리를 수행하려고했지만 올바른 결과를 얻을 수없는 것 같습니다.SQL 쿼리 도움말 (문자열 쿼리와 같은 쿼리에서 계산)

내가 두 테이블했습니다 : 내가 필요하면 목록에 쿼리

User = {userid: int, username} 

Registered = {userid: int, favoriteid: int} 

입니다 모든 사용자 ID의 각 사용자의 사용자 이름. 또한, 사용자가 등록 된 즐겨 찾기의 총 수를 계산해야합니다.

즐겨 찾기에 등록되지 않은 사용자도 나열해야하지만 즐겨 찾기 개수는 0으로 표시되어야합니다.

나는 내 요청을 아마 설명했으면 좋겠다. 그렇지 않으면 내가 더 자세히 설명 할 수 있기를 바란다. 그런데

, 나는이 같은 표정으로 시도한 쿼리 : 그러나

SELECT user.userid, user.username FROM user,registered WHERE user.userid = registered.userid(SELECT COUNT(favoriteid) FROM registered) 

, 그것은 불행하게도

종류는 Mestika

답변

1

이 방법으로이 (테스트되지 않은) 같은

Select u.userid, username, ISNULL(x.FavoriteCount, 0) as FavoriteCount 
From User u 
Left Join 
(Select userid, count(*) as FavoriteCount 
From Registered 
Group By userid) x 
on u.userid = x.userid 

을 시도,이 SQL 서버 구문입니다. MySQL 구문은 IFNULL 함수를 사용하여 ISNULL 함수를 바꿀 수 있습니다. 이것이 다른 DBMS라면, 적어도 당신에게 아이디어를 줄 것입니다.

편집 : OMG Ponies에 따르면 SQL Server/MySQL/Oracle/etc에서 작동하도록 ISNULL 대신 COALESCE를 사용할 수 있습니다. SQL Server에서이를 확인했습니다.

널 함수의 더 많은 정보를 위해, 여기에서 참조 : http://www.w3schools.com/SQL/sql_isnull.asp

+1

'COALESCE'에 대해'ISNULL '을 스왑 아웃하면 Oracle, SQL Server, MySQL, Postgres ...에서 작동하는 쿼리가 있습니다. –

+0

좋은 호출입니다. 그리고 필자는 테스트 데이터베이스에 대한 내 진술을 테스트하여 다른 사람을 잘못 인도하지 않았는지 확인했습니다. –

0
Select userid, username 
    , (Select Count(*) From Registered As R Where R.userid = U.userid) As RegistrationCount 
From User As U 
과 관련, 트릭을하지 않습니다

즐겨 찾기가 Null 입력 가능일 경우

Select userid, username 
    , (Select Count(favoriteid) From Registered As R Where R.userid = U.userid) As RegistrationCount 
From User As U 
+0

정말 고마워요 토마스 (등록 1 registered.userid = user.userid 선택)하지 user.userid, user.username, user.userid SELECT 그것은 매력과 정말 빠른 답변처럼 작동합니다. . 다시 감사 :-) – Mestika

0

SELECT user.userid, user.username을 (favoriteid) 카운트 FROM 사용자가 user.userid = registered.userid gorupby 사용자 등록. 사용자 ID는 user.username UNION은 사용자 EXISITS이