1
を使用し2つの列の間のパーセンテージ:計算、私は次のことを行い、SQL Serverのストアドプロシージャ書いTOP句
- が
- は輸入額との合計を計算し、トップ5の輸入を取得します 01:各
- のための輸入量は、全体の総輸入値とボリューム
に対する割合は、ここに私のクエリの計算します
DECLARE @OVERALL_TOTAL_VAL AS BIGINT
DECLARE @OVERALL_TOTAL_VOL AS BIGINT
SET NOCOUNT ON;
-- GET TOTAL VALUE AND VOLUME FROM ALL IMPORTERS TO USE FOR GETTING THE %
SET @OVERALL_TOTAL_VAL = (SELECT SUM(IMPORTEDVALUE)
FROM [DBO].[ALERT]
WHERE IMPORTERCODE != 0)
SET @OVERALL_TOTAL_VOL = (SELECT SUM(IMPORTEDVOLUME)
FROM [DBO].[Alert]
WHERE IMPORTERCODE != 0)
-- GET TOP 5 IMPORTERS
SELECT
TOP 5 IMPORTERCODE,
@OVERALL_TOTAL_VAL TOTAL_VAL,
@OVERALL_TOTAL_VOL TOTAL_VOL,
SUM(IMPORTEDVALUE) TOTAL_IMPORT_VALUE,
SUM(IMPORTEDVOLUME) TOTAL_IMPORT_VOL,
--((SUM(IMPORTEDVALUE)/@OVERALL_TOTAL_VAL) * 100) NET_VAL,
--((SUM(IMPORTEDVOLUME)/@OVERALL_TOTAL_VOL) * 100) NET_VOL,
--(((SELECT SUM(IMPORTEDVALUE)
-- FROM [DBO].[ALERT]
-- WHERE IMPORTERCODE = A1.IMPORTERCODE
-- GROUP BY IMPORTERCODE)/@OVERALL_TOTAL_VAL) * 100) NET_VAL,
COUNT(*) ALERT_COUNT
FROM [DBO].[ALERT] A1
WHERE IMPORTERCODE != 0
GROUP BY IMPORTERCODE
ORDER BY ALERT_COUNT DESC;
コメントアウトされた行は私が試した行ですが、残念ながらうまくいきませんでした。私もクロス結合を試みました(Get column sum and use to calculate percent of total (mySQL)経由)。同様にうまくいかなかった。
これは私のSELECT
の文にTOP 5
が含まれているためですか?私がしようとしていることは可能ですか?もしそうでなければ、私のアプリのフロントエンド側でパーセンテージ計算をしなければならないので、可能ならばそれを避けたい。
助けてください。ありがとうございました。
更新日:最後に動作させました。結局のところ、パラメータの必要はなかったと思う。助けてくれたlad2025ありがとう!
SELECT DISTINCT
TOP 5 IMPORTERCODE,
SUM(IMPORTEDVALUE) OVER(PARTITION BY IMPORTERCODE) AS TOTAL_IMPORT_VAL,
SUM(IMPORTEDVOLUME) OVER(PARTITION BY IMPORTERCODE) AS TOTAL_IMPORT_VOL,
100.0 * SUM(IMPORTEDVALUE) OVER (PARTITION BY IMPORTERCODE)/
SUM(IMPORTEDVALUE) OVER() AS NET_VAL,
100.0 * SUM(IMPORTEDVOLUME) OVER (PARTITION BY IMPORTERCODE)/
SUM(IMPORTEDVOLUME) OVER() AS NET_VOL,
COUNT(*) OVER(PARTITION BY IMPORTERCODE) ALERT_COUNT
FROM [DBO].[ALERT]
WHERE IMPORTERCODE != 0
ORDER BY ALERT_COUNT DESC;
感謝を!クエリで使用された 'OVER()'を見るのは初めてのことです。ウィンドウ関数の意味ですか?それは何をするためのものか? –
これは機能しています!私は 'COUNT()'の結果が必要だったので少し修正しなければなりませんでした。ご協力ありがとうございました! –
@DeeJ。はい、「オーバー」はウィンドウ関数用です。 – lad2025