だから本当に休みかなんかありますが、私の人生ではこれがわかりません。分割しようとしていますtier1
by total
合計のパーセンテージを取得します。私はこのように考えました:
(tier1 / total) as per
しかし、運はありません。私はこれらをintとしてキャストしますが、まだ何もありません。エラーが発生してクエリが実行されないか、値が0になります。
これが私が作業しようとしているものです:
SELECT count(student_id) as total
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 1) as tier1
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 2) as tier2
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 3) as tier3
FROM national_assessments.aimsweb
WHERE general_outcome_measure = 'PSF' AND fall_september_tier IS NOT NULL
私もこのアイデアを持っていましたが、運がありませんでした:
SELECT tier1,total, tier1/total as test
FROM (
SELECT count(student_id) as total
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 1) as tier1
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 2) as tier2
,(SELECT count(fall_september_tier) FROM national_assessments.aimsweb WHERE general_outcome_measure = 'PSF' AND fall_september_tier = 3) as tier3
FROM national_assessments.aimsweb
WHERE general_outcome_measure = 'PSF' AND fall_september_tier IS NOT NULL
) as test
整数除算は小数桁を切り捨てます。式は0と1の間の比率を返しますが、常に0に切り捨てられます。
「パーセンテージ」を取得するには、まず100を掛けます。
小数桁も取得するには、 numeric
にキャストします(除算する前に)-または_100.0
_を掛けます。数値リテラルに小数桁があると、結果は自動的にnumeric
になります。
通常、2つの小数桁などに丸めます。そのためにはround()
を使用します(numeric
でのみ機能します)。
取得したクエリに他のいくつかの基本的な最適化を追加します。
_SELECT total
,tier1, round((tier1 * 100.0) / total, 2) AS tier1_pct
,tier2, round((tier2 * 100.0) / total, 2) AS tier2_pct
,tier3, round((tier3 * 100.0) / total, 2) AS tier3_pct
FROM (
SELECT count(*) AS total
,count(fall_september_tier = 1 OR NULL) AS tier1
,count(fall_september_tier = 2 OR NULL) AS tier2
,count(fall_september_tier = 3 OR NULL) AS tier3
FROM national_assessments.aimsweb
WHERE general_outcome_measure = 'PSF'
AND fall_september_tier IS NOT NULL
) sub;
_
カウント手法の説明: