2017-04-11 10 views
0

%を計算するのにCodeBの代わりにCodeAを使用する理由を聞かれますか?結果はまったく異なります。SQLパーセンテージ構文

ありがとうございました!


CODEA

select name, round(sum(amount_paid)/
    (select sum(amount_paid) from order_items) * 100.0, 2) as pct 
from order_items 
group by 1 
order by 2 desc; 

CODEB

select name, round((amount_paid/
    sum(amount_paid)) * 100.0, 2) as pct 
from order_items 
group by 1 
order by 2 desc; 

+1

使用しているdbmsにタグを付けます。 (これらのクエリは製品固有のものです) – jarlh

+0

私はCodecademyのチュートリアルに従っています。それで、私は潜望鏡ですか? –

答えて

1

間違ったGROUP BYステートメント(集計機能なしの列)を使用しているため、コードBは完全に間違っています。

厳密なデータベースは、このクエリを使用しようとするとエラーが発生します。

CodeAは、テーブルから合計sum(amount_paid)を計算し、それを各行の割合を計算するために使用する副選択(select sum(amount_paid) from order_items)を使用します。

0

KNせずに必ずすることは困難ですあなたが操作しているデータベースとデータが原因です。私はしかし、SQLのセクションごとのグループは、選択セクションの前に実行されると信じています。つまり、CodeBでは、レコードはamount_paidフィールドで時間の合計(amount_paid)が実行されて、名前列によってグループ化されていると考えられます。これは、すべてのレコードではなく、グループごとにレコードの合計を計算することを意味します。