-3

ソース テーブル

2つの列を与えるクエリを書きたい:

1> クエリのタイプ 2> カ​​ウント

この結果セットは次の構造を持つ必要があります

ここに画像の説明を入力

ここでは、最初の列の値を事前定義し、カウントを計算する必要があります。ソース テーブルの Request 列を確認し、特定のパターンを見つけたい。そのパターンが見つかった場合は、カウントを増やします。

例えば ​​:

リクエスト列に「greenhopper」という単語が見つかった場合、それはタイプ GREENHOPPER に属します。

また

「ガジェット」という単語が見つかった場合、そのタイプは DASHBOARD です。等々 ...

そこで、ログテーブルを使って、さまざまなカテゴリの使用状況を分析したいと考えています。

したがって、最終的に使用量を取得でき、その後、それから円グラフを作成できます。 ここに画像の説明を入力

4

2 に答える 2

1
WITH Requests AS
(
SELECT
CASE
WHEN Request LIKE '%Greenhopper%' THEN 'GreenHopper'
WHEN Request LIKE '%gadgets%' THEN 'Gadgets'
-- and so on
ELSE 'Misc'
END RequestType
FROM YourTable
)
SELECT
RequestType,
COUNT(*) RequesCount
FROM Requests
GROUP BY RequestType
;

テストするデータはありませんが、テーブルのスキャン回数が減るため、このアプローチの方がパフォーマンスが向上すると思います。LIKE と最初のワイルドカードがあるため、パフォーマンスが理想的になることはありません。これにより、シークが防止されます。

ここでLIKE が実行されない理由の詳細な説明

質問を再確認したら、検索文字列を変更して右側にワイルドカードのみを含めることで、パフォーマンスをさらに向上させることができる場合があります。

例: LIKE 'GET /rest/gadget%' など。

于 2012-06-15T15:34:43.297 に答える
1
SELECT 'Greenhopper' AS TypeOfQuery, COUNT(*) AS Cnt
FROM YourTable
WHERE Request LIKE '%Greenhopper%'
UNION ALL
SELECT 'Dashboard', COUNT(*)
FROM YourTable
WHERE Request LIKE '%gadgets%'
-- And so forth

あなたはそれらが事前定義されていると言いましたよね?したがって、10 個までの異なるステートメントをUNIONまとめることになります。

于 2012-06-15T15:12:45.273 に答える