問題:
グループの1つの列の値の合計が特定の値よりも小さい行を見つける必要があります。
例:
私たちのデータベースには、company
次の列にデータがあります:id
、department
、first_name
、last_name
、およびsalary
。
id | 部門 | first_name | last_name | 給与 |
---|---|---|---|---|
1 | マーケティング | ロラ | ブラウン | 2300 |
2 | ファイナンス | ジョン | ジャクソン | 3200 |
3 | マーケティング | マイケル | トムソン | 1270 |
4 | プロダクション | トニー | ミラー | 6500 |
5 | プロダクション | サリー | 緑 | 2500 |
6 | ファイナンス | オリビエ | 黒 | 3450 |
7 | プロダクション | ジェニファー | ミシュラン | 2800 |
8 | マーケティング | ジェレミー | ローソン | 3600 |
9 | マーケティング | ルイ | スミス | 4200 |
従業員の給与の合計が7000未満の部門の名前を見つけましょう。
解決策:
SELECT department, SUM(salary) FROM company GROUP BY department HAVING SUM(salary)<7000;
結果は次のとおりです。
部門 | 合計 |
---|---|
ファイナンス | 6550 |
ディスカッション:
集計関数(以前の関数SUM)を使用してレコードをフィルタリングするには、HAVING句を使用します。行の各グループの値の合計を計算するには、集計SUM関数を使用します。このクエリでは、列部門は、従業員のすべての給与の合計をグループとして計算されます(列給与を引数として、SUM関数を使用して計算されます)。行の各グループの値を計算するため(部門の名前に従って行をグループ化します)、クエリには、行をグループ化する列の名前(この例では、GROUP BY department
)。最後のステップは、HAVING句で集計関数を使用することです。 HAVINGはGROUPBY句の後に置く必要があることを忘れないでください。 HAVINGには、集計関数によって返される値を指定された値と比較する条件が含まれています。上から見ると、値が7000未満の給与の合計です(SUM(salary)<7000
)。ここでは、各部門の給与額が7000未満であることを確認します。クエリには、6550の給与を持つ財務部門のみが表示されました。