2012-04-28 14 views
0

私はこれを今のところ把握しようとしていて、すぐにそれを理解するつもりはないと決めました!事前に助けてくれてありがとう。この場所を愛する。カラムが別のテーブルと一致しているテーブルを合計して結果を結合する

date_id, user_id, cost, title, description 

date_rating:

date_id, user_id, rating 

私は同じdate_idが異なるuser_id年代で複数のエントリを持つ

は、私は2つのテーブル

日付を持っています。つまり、同じ日付の複数の評価です。評価は1または-1です。すべてのレーティングを同じdate_idと一緒に追加して、それをDATEテーブルのdate_idと一致するテーブルに追加します。テーブルDATEに評価と呼ばれる列があるように。このように私は評価で並べ替えることができます。簡単に聞こえますが、それほど簡単ではないことが証明されています。私はDBAが私のものではないと思う!

編集:MySQLクライアントのバージョン:mysqlnd 5.0.8-devの - 20102224 - $リビジョン:310735 $

+0

申し訳ありませんが、それはMySQLの。 – penner

答えて

3

あなたはちょうどこのようなものを使用することができませんか?それはdate_idだで指定された各日付の評価の合計を取得するだけで相関サブクエリ

SELECT 
    date_id, user_id, cost, title, description, 
    (SELECT SUM(rating) FROM date_rating dr WHERE dr.date_id = d.date_id) AS 'Rating' 
FROM 
    date d 

:私はMySQLの専門家で、あなたの心(私はより多くのSQL Serverの男です)よん?

+0

これは感謝!私の心は吹かれました。 – penner

1

あなたはGROUP BYを使用することができます。

SELECT date.*, SUM(date_rating.rating) AS Rating 
FROM date JOIN date_rating USING (date_id) 
GROUP BY date_id; 
0

あなたは評価を合計するGROUP BYを使用する必要があります。あなたのテーブルからコストコラムを無視しました。また、user_id列。これらの2つのテーブルの間にはdate_idだけが関連しているようです。以下のクエリはSQL Server 2012で作成されテストされましたが、SELECTステートメントはマイナーチェンジでもMySQLで動作するはずです。

スクリプト

CREATE TABLE dbo.[date] 
(  
     [date_id]  INT    NOT NULL IDENTITY 
    , [title]   VARCHAR(100) NOT NULL 
    , [description] VARCHAR(100) NOT NULL 
); 

CREATE TABLE dbo.[date_rating] 
(  
     [date_id]  INT    NOT NULL 
    , [user_id]  INT    NOT NULL 
    , [rating]  INT    NOT NULL 
); 

INSERT INTO dbo.[date] ([title], [description]) VALUES 
    ('title 1', 'description 1'), 
    ('title 2', 'description 2'), 
    ('title 3', 'description 3'); 

INSERT INTO dbo.[date_rating] ([date_id], [user_id], [rating]) VALUES 
    (1, 100, 1), 
    (1, 200, -1), 
    (2, 200, -1), 
    (1, 200, 1), 
    (3, 200, 1), 
    (1, 200, -1); 

SELECT  d.[date_id] 
     , d.[title] 
     , d.[description] 
     , SUM([rating]) AS ratings 
FROM  dbo.[date]   d 
INNER JOIN dbo.[date_rating] dr 
ON   d.date_id   = dr.date_id 
GROUP BY d.[date_id] 
     , d.[title] 
     , d.[description]; 

出力

date_id title description ratings 
------- ------- ------------- ------- 
1  title 1 description 1 0 
2  title 2 description 2 -1 
3  title 3 description 3 1 
関連する問題