0

これの作り方がわかりません。


バックグラウンド:

プロファイル -> ユーザー プロファイルを含むテーブル

スコア -> ユーザーのスコアを含むテーブル (1 人のユーザーが複数のスコアを持つことができます) (このテーブルには、新しいスコアをいつ導入するかを知るための 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

2 に答える 2

4

問題VIEWに を含めることはできませんsubquery。集計を実行していないため、クエリのサブクエリをテーブルに直接結合できます。

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

GROUP BYクエリに節がある理由がわかりません。

于 2013-01-22T15:59:10.963 に答える
0

コードを 2 つのビューに分割できます

ビュー 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 でグループ化する理由はわかりませんが、データに私が知らない何かがあるのか​​もしれません

于 2013-01-22T16:25:15.317 に答える