2013-01-22 6 views
0

나는 이것을 만드는 방법을 모르겠다.MYSQL SELECT에서 MYSQL VIEW까지


배경 :

프로필 - 사용자의 점수 표는이 표는 알아야 할 created_at 필드가 ((한 사용자가 여러 점수를 할 수 있습니다)> -> 사용자와 테이블

점수 프로필 나는 새로운 점수를 소개합니다)

점수 표를 저장한다고 klout 점수 데이터를 상상해보십시오.


어떻게이 쿼리를보기로 변환합니까? 당신이 어떤 집계를 수행하지 않았으므로

SELECT t1.id, 
    t1.name, 
    t1.screen_name, 
    t1.description, 
    t1.url, 
    t1.statuses_count, 
    t1.followers_count, 
    t1.friends_count, 
    t1.listed_count, 
    t1.favourites_count, 
    t1.utc_offset, 
    t1.time_zone, 
    t1.verified, 
    t1.lang, 
    t1.profile_image_url, 
    t1.geo_enabled, 
    t1.location, 
    t1.lat, 
    t1.lng, 
    t1.created_at, 
    t3.score, 
    t3.delta, 
    t3.detail 
     FROM profiles t1 LEFT JOIN (SELECT t2.user_id, t2.score, t2.delta, t2.detail 
                FROM scores t2 
                ORDER BY t2.created_at DESC) 
       AS t3 ON t3.user_id = t1.id 
     GROUP BY t1.id 

답변

4

subquery을 포함 할 수 없습니다 문제 VIEW은 쿼리의 하위 쿼리를 직접 테이블에 가입 할 수 있습니다. 당신이 당신의 쿼리에 GROUP BY 절을 왜

CREATE VIEW viewName 
AS 
SELECT t1.id, 
     t1.name, 
     t1.screen_name, 
     t1.description, 
     t1.url, 
     t1.statuses_count, 
     t1.followers_count, 
     t1.friends_count, 
     t1.listed_count, 
     t1.favourites_count, 
     t1.utc_offset, 
     t1.time_zone, 
     t1.verified, 
     t1.lang, 
     t1.profile_image_url, 
     t1.geo_enabled, 
     t1.location, 
     t1.lat, 
     t1.lng, 
     t1.created_at, 
     t3.score, 
     t3.delta, 
     t3.detail 
FROM profiles t1 
     LEFT JOIN scores t3 
      ON t3.user_id = t1.id 
-- GROUP BY t1.id 

내가 얻을 수 없습니다.

+0

배경 : 프로필 -> 사용자 프로필이있는 테이블 점수 -> 사용자 점수 (한 명의 사용자가 여러 점수를 가질 수 있음) (이 표에는 새로운 점수를 입력 할 때 알 수있는 created_at 필드가 있음) 점수 표 저장 klout 점수를 상상해보십시오. 데이터. –

+1

그 중 하나도 그룹을 얻지 못합니다. 일반적으로 그룹화 기준은 집계가있는 경우에만 고려됩니다. 예 : a.name, a.id, sum (a.amt_paid) a.name 별 그룹 테이블에서, a.id = 각 고유 한 이름과 ID 조합에 대해 지불 한 금액 ... 위의 그룹을 사용하거나 왼쪽 조인을 선택하면 쿼리를 영원히 계산할 수있게되며 쿼리는 쿼리의 첫 번째 요소이므로 ID별로 그룹화됩니다. – Hituptony

0

당신이 개보기

보기 1에 코드를 분할 할 수 있습니다 :

CREATE VIEW step1 

AS 

SELECT t2.user_id, t2.score, t2.delta, t2.detail 
FROM scores t2 
ORDER BY t2.created_at DESC 

보기 2 :

CREATE VIEW step2 

AS 

SELECT t1.id, 
       t1.name, 
       t1.screen_name, 
       t1.description, 
       t1.url, 
       t1.statuses_count, 
       t1.followers_count, 
       t1.friends_count, 
       t1.listed_count, 
       t1.favourites_count, 
       t1.utc_offset, 
       t1.time_zone, 
       t1.verified, 
       t1.lang, 
       t1.profile_image_url, 
       t1.geo_enabled, 
       t1.location, 
       t1.lat, 
       t1.lng, 
       t1.created_at, 
       t3.score, 
       t3.delta, 
       t3.detail 
FROM profiles t1 
    LEFT JOIN step1 AS t3 ON t3.user_id = t1.id 
GROUP BY t1.id 

내가, 당신이 t1.id에 의해 그룹화하는 이유를 모르겠지만 데이터에 내가 모르는 부분이있을 수 있습니다.