2017-05-23 11 views
0

私は歌アーカイブデータベースで作業しています。平均を計算してテーブルに挿入するSQLクエリ

  • は、各ユーザーがSongの平均scoreを計算
  • を持っているどのくらい購入算定Users
  • に彼らの平均Commentsscoreの価値と評価を挿入することにより、各ユーザの評価を計算する - 私はしたいと思いますCommentsテーブル
  • 各ユーザーが購入に費やした額の合計を計算する

あなたが私のテーブルを見ることができます...

CREATE TABLE Users 
(
    username NVARCHAR(30) NOT NULL PRIMARY KEY, 
    pass  NVARCHAR(16), 
    email  NVARCHAR(50), 
    city  NVARCHAR(10), 
    credits INT, 
    rating  INT 
) 

CREATE TABLE Songs 
(
    song_id  INT    NOT NULL IDENTITY (1, 1) PRIMARY KEY, 
    song_name  NVARCHAR(30), 
    username  NVARCHAR(30), 
    genre   INT, 
    price   INT, 
    song_length INT, 
    listens  INT 
) 

CREATE TABLE Genres 
(
    genre_id  INT    NOT NULL IDENTITY (1, 1) PRIMARY KEY, 
    genre_name NVARCHAR(16) 
) 


CREATE TABLE Purchases 
(
    purchase_id  INT    NOT NULL IDENTITY (1, 1) PRIMARY KEY, 
    song_id   INT, 
    username   NVARCHAR(30) 
    date_purchased DATETIME 
) 

CREATE TABLE Comments 
(
    comment_id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY, 
    username  NVARCHAR(30), 
    song_id  INT, 
    text   NVARCHAR(30), 
    score  INT 
) 
+0

は、あなたが持っているたとえばquestion.Sayの範囲を縮小してみてくださいあなたが何か問題を抱えている場合は、この '平均評点スコアで各ユーザーの評価を計算する..平均スコアを計算し、質問を投稿してください – TheGameiswar

+0

@ TheGameiswar私はそれがちょっと緊急だと私はあまりにも錆びている知っている私は書く必要がある別のクエリが、私はそれのハングアップを得るためにそれらを必要とする、それは多くの助けになります – Shaxib

+0

プレゼンテーションとレイアウトスタイルをより一貫性*にするあなたの質問を編集し、スペース/タブの過度の使用を減らしました。英語の使い方を少し改善しました。あなたが何回*購入したか(購入回数)、購入の合計値、または購入の平均値を求めているかどうかを明確にするために、2番目の点を編集してください。試しているコードがある場合は、エラーメッセージを追加してください。 – toonice

答えて

0

は、私はあなたの質問のいくつかに答えました。それぞれのクエリに加えて、私はそれらを使用する便利な方法かもしれない共通のテーブル式としてそれらを配置しました...

各ユーザーが購入に費やしたクレジットの量を計算すると、ユーザーがクレジットをどのように投資するかについて

WITH CTE_PurchasesByUser AS 
    (
     SELECT p.username as username, count(*) as NrOfPurchases 
     FROM Purchases p 
     GROUP BY p.username 
    ), 
    CTE_AverageScoreBySong AS 
    (
     SELECT c.song_id as song_id, (sum(c.score)/count(c.score)) as AverageScore 
     FROM Comments c 
     GROUP BY c.song_id 
    ), 
    CTE_AverageScoreByUser AS 
    (
     SELECT u.username as username, (sum(c.score)/count(c.score)) as AverageScore 
     FROM Users u 
     INNER JOIN Comments c ON u.username = c.username 
     GROUP BY u.username 
    ) 
    SELECT u.*, ISNULL(bbu.NrOfPurchases,0), asu.AverageScore 
    FROM Users u 
    LEFT JOIN CTE_PurchasesByUser bbu ON u.username = bbu.username 
    LEFT JOIN CTE_AverageScoreByUser asu ON u.username = asu.username 

このSQLは、あなたのテーブルを走った、まだ私はデータ行でそれをテストしていない...これは広義にある

+0

本当にありがとう、私は考えを持っていると思う、手続きを助ける良いウェブサイトがありますか? – Shaxib

+0

私は良いウェブサイトがたくさんあると思います。がんばろう :-) – CHS