2017-09-11 5 views
0

私はデータベースとして、すべてのコンピュータの名前とモデルを、チケットとしてシステムに登録したときに保存します。一意の値をSUMにして、コンピュータメーカーの名前の数を示す表を表示します。SQL Sum名とパーセントでデータベースに何回出現するか

すなわち

HP  30% 
Dell  10% 
Toshiba 40% 
Sony  20% 

私のクエリは、すべてのチケットからすべての発生を示している。このように見えます。私は、上記の表に変換するに取り掛かるするかどうかはわからない:

SELECT 
    ComputerMake.ComputerMakeName 
FROM 
    Ticket 
    INNER JOIN Asset ON Ticket.AssetID = Asset.AssetID 
    INNER JOIN ComputerMake ON Asset.ComputerMakeID = ComputerMake.ComputerMakeID 

私は各ComputerMakeNameを合計し、その簡単な仕事確信しているが、これが私の基本的なSQLの経験を超えています!

ありがとうございます。

+0

冗長性を避けるために、CTEをウィル使用することを検討してくださいこれらのテーブルのスキーマを投稿する – gh9

+0

私はlinqでこれを書いて、SQLに変更しました。私はlinqタグを削除します! – Belliez

+1

どのDBMSを使用していますか? –

答えて

1

だから最初は、各コンピュータの製造元が予約された回数をカウントする必要があり、その後、割合をカルク:

SELECT 
    ComputerMake.ComputerMakeName 
, count(*) * 100/(select count(*) from FROM 
         Ticket 
         INNER JOIN Asset ON Ticket.AssetID = Asset.AssetID 
         INNER JOIN ComputerMake ON Asset.ComputerMakeID = ComputerMake.ComputerMakeID) as count_computers 
FROM 
    Ticket 
    INNER JOIN Asset ON Ticket.AssetID = Asset.AssetID 
    INNER JOIN ComputerMake ON Asset.ComputerMakeID = ComputerMake.ComputerMakeID 
group by ComputerMake.ComputerMakeName 
+1

これはかなり悪いです。相関サブクエリ 'select count(*)from t'を使用しています。あなたは何を1でグループ化していますか? – gh9

+0

@ gh9あなたは正しいです。サブクエリを取り出しました –

+1

新しいクエリがおそらく悪いです。その 'select count(*)...'は、メインのクエリの結果セット内の永続的な行に対して実行されます。呼び出しRBAR、Row By Agonizing Row。したがって、外部クエリに20個の結果がある場合、 'select count(*).... 'は20回実行されます。 – gh9

1

は、クエリを簡素化し、

WITH computer_CTE(computerName) AS 
(
    SELECT ComputerMake.ComputerMakeName 
    FROM Ticket 
    INNER JOIN Asset ON Ticket.AssetID = Asset.AssetID 
    INNER JOIN ComputerMake ON Asset.ComputerMakeID = ComputerMake.ComputerMakeID 
) 
Select computerName, (Count(*) * 100/(Select Count(*) From computer_CTE)) as Percent 
From computer_CTE 
Group By computerName 
+0

これは素晴らしい、ありがとう。開始日と終了日の間に作成されたデバイスの合計に基づいてパーセンテージを計算できるように、「Ticket.CreateDate> @StartDateおよびTicket.CreateDate <@EndDate」を含める必要もあります。内側の結合がうまくいった後にこれを追加する。 – Belliez

+0

@belliezあなたにはうれしいです –

関連する問題