MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

これからの道のりは長く困難ですが、私は探求を続けます。また週末がやってきました。引き続き、皆さんと一緒に MySQL の知識を復習していきます。

前回はプロセス制御機能についてお話ししましたが、今回も引き続きプロセス制御機能について学んでいきましょう!

#5. プロセス制御関数 #1. if 関数: if elseIF の効果 (条件式、true の場合は 1 を返し、false の場合は 2 を返す)
#Java の三項演算と同じ SELECT IF(10>5,'big','small'); 

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'No bonus','Yes bonus') AS comments FROM employees; 

#2. CASE関数の使い方1:スウィッチケースの効果[等価判定]
要約: switch(変数または式) {
case 定数 1: ステートメント 1; break;
...
デフォルト: ステートメント n; break;
}
MySQL では、case は定数 1 の場合に判断されるフィールド、式、または変数であり、表示される値は 1 またはステートメント 1 です。[ステートメントにはセミコロンが必要ですが、値には必要ありません]
定数 2 の場合、表示される値 2 またはステートメント 2。
...
slse 表示する値 n またはステートメント n; [デフォルト値]
終わり
Case は SELECT の後の式と同等です。その後にステートメントを配置することはできず、値のみを配置できます。
以降の研究では、ストアド プロシージャと関数は、SLECT なしで、またはステートメントとともに独立して使用できます。
まず、式の使用例を見てみましょう。従業員の給与を照会します。部門番号 = 30 の場合、表示される給与は 1.1 倍です。部門番号 = 40 の場合、表示される給与は 1.2 倍です。部門番号 = 50 の場合、表示される給与は 1.3 倍です。他の部門の場合、表示される給与は元の給与です。
給与を選択 元の給与、部門ID、
ケース部門ID
30歳になると給与*1.1
40歳になると給与*1.2
50歳になると給与*1.3
それ以外の場合の給与
END AS newSalary FROM 従業員; 

#2.CASE関数の使い方2:多重IF【区間判定】
Java の確認: if (条件 1) {
声明1;
}else if(条件2){
ステートメント2;
}...
それ以外{
ステートメントn;
}
mysqlの場合:
場合
条件 1 の場合、値 1 が表示されるか、ステートメント [ステートメントの後にセミコロンを追加する必要があります。]
条件 2 の場合、表示される値 2 またはステートメント [ステートメントの後にセミコロンを追加する必要があります。]
...
そうでない場合は、表示される値 n またはステートメント n
終わり
例: 従業員の給与を照会します。給与が 20,000 を超える場合はレベル A を表示します。給与が 15,000 を超える場合はレベル B を表示します。給与が 10,000 を超える場合はレベル C を表示します。それ以外の場合はレベル D を表示します。 

================処理機能はここで終了です。使いこなすにはさらに練習が必要です。 ===============

読者の皆さんが挑戦できる練習をいくつかご紹介します。

#数種類の賃金を計算します。
SELECT COUNT(DISTINCT 給与)、
COUNT(給与)
従業員から; 

#5. カウント関数の詳細な紹介 SELECT COUNT(salary) FROM employees; 

#COUNT (すべての列を数える)
従業員からCOUNT(*)を選択します。 

#テーブルの行から列を生成し、各列は 1 になります。 1 の合計数を数えます。 count には任意の定数値を使用できます。
従業員からCOUNT(1)を選択します。 

# 効率性の問題を考慮すると:
#5.5 より前は、MYISAM では COUNT(*) が最高値で、カウンタが直接返されていました。#5.5 以降では、デフォルトでは INNODB の COUNT() と COUNT(1) はほぼ同じです。
 COUNT(field) よりも効率的です。フィールドの場合は、フィールドが NULL かどうかを判断する必要があります。
#6. グループ化関数と一緒にクエリされるフィールドは制限されています SELECT AVG(salary),employee_id FROM employees; 

#1. 会社の従業員の最高、最低、平均、合計給与を照会します。
SELECT MAX(給与),MIN(給与),AVG(給与),SUM(給与)
従業員から; 

SELECT MAX(給与) AS 最大値、MIN(給与) AS 最小値、
ROUND(AVG(給与)) AS 最小値、SUM(給与) AS 合計 FROM 従業員; 

#2. 従業員テーブルの最大入社時間と最小入社時間の間の日数の差を照会します。
#DATEDIFF 日数を計算します。 DATEIFF(パラメータ1 - パラメータ2)
DATEDIFF(NOW(),('1995-1-1'))を選択します。 

DATEDIFF(MAX(hiredate),MIN(hiredate)) を DIF として選択します
従業員から; 

#3. 部門番号 90 の従業員数を照会します。
SELECT COUNT(*) AS number FROM employees
ここで、department_id=90; 

#上級 5. グループクエリの GROUP BY 句の構文。
GROUP BY 句を使用すると、テーブル内のデータを複数のグループに分割できます。
文法:
SELECT グループ化関数、列 (GROUP BY の後に指定する必要があります)
FROM テーブル [WHERE フィルタ条件]
GROP BY グループリスト [ORDER BY 句]
知らせ:
  クエリ リストは特別なものである必要があり、グループ化関数と、GROUP BY の後に表示されるフィールド特性が必要です。
  1. グループクエリのフィルタリング条件は2つのカテゴリに分かれています

2. GROUP BY句は、単一フィールドのグループ化と複数フィールドのグループ化をサポートします(複数のフィールドは順序を問わずにカンマで区切られます)
式または関数のグループ化もサポートします(あまり一般的ではありません)
3. 並べ替えを追加することもできます(並べ替えはグループ化クエリ全体の最後に配置されます) 

#はじめに: 各部門の平均給与を照会し、小数点以下 2 桁を保持します。
SELECT ROUND(AVG(salary),2) AS average salary FROM employees; 

#シンプルなグループクエリ、グループ化の前にフィルタリングを追加 WHERE
#ケース 1: 各職種の最高給与を照会します。
SELECT MAX(salary) AS 最高給与、job_id AS 職務番号 FROM employees
ジョブIDごとにグループ化します。 

#ケース 2: 各場所の部門数を照会します。
SELECT COUNT(*) AS total,location_id
部門から
location_id でグループ化します。 

#フィルター条件を追加#文字 a を含むメール、小数点以下 2 桁の平均給与、各部門の平均給与をクエリ SELECT email,ROUND(AVG(salary),2),department_id
従業員から
WHERE メール LIKE '%a%'
部門IDでグループ化; 

#ケース2: 各リーダーの従業員の最高給与とボーナスを照会する SELECT MAX(salary), manager_id
従業員から
手数料_pctがNULLではない場合
GROUP BY マネージャーID; 

複雑なフィルタリングを追加し、グループ化後にフィルタリングを追加する
#ケース1: 従業員数が2人以上の部門を照会する
#①各部署の従業員数を問い合わせるSELECT COUNT(*),department_id
従業員から
部門IDでグループ化; 

#②①の結果に基づいて、どの部門に2人以上の従業員がいるかを確認します
SELECT COUNT(*) AS total, department_id AS department number FROM employees
部門IDによるグループ化
COUNT(*)>2である; 

#ケース 2. 最高給与が 12000 を超える各職種でボーナスのある従業員の職番号と最高給与を照会します。
#①各職種でボーナスを受け取った従業員の最高給与を照会します。
#フィルタリングできる元のテーブルをFROMの後に配置し、WHEREを使用します。
SELECT job_id AS employee number, MAX(salary) AS maximum salary FROM employees
手数料_pctがNULLではない場合
ジョブIDごとにグループ化します。 

#②①の結果を踏まえて選考を継続し、最高給与が12000以上となる。
SELECT job_id AS employee number, MAX(salary) AS maximum salary FROM employees
手数料_pctがNULLではない場合
ジョブIDでグループ化
MAX(給与)>12000である; 

#ケース 3. 最低給与が 5000 を超える各リーダーのリーダー番号と、リーダー番号が 102 を超えるリーダーの最低給与を照会します。
#①リーダー番号が102以上の各リーダーの最低給与を照会する SELECT MIN(salary) AS minimum salary, manager_id AS leader number FROM employees
マネージャID > 102
GROUP BY マネージャーID; 

②最低賃金が5000以上であること。
SELECT MIN(salary) AS minimum salary, manager_id AS leaders number FROM employees を選択
マネージャID > 102
GROUP BY マネージャーID
最低賃金が5000以上であること

# ケース: 従業員名の長さでグループ化し、各グループの従業員数を照会して、名前が 5 を超える従業員をフィルター処理します。# MYSQL では、GROUP BY および HAVING の後にはエイリアスがサポートされますが、WHERE の後にはエイリアスがサポートされません。ただし、ORACLE データベースの GROUP BY および HAVING はエイリアスをサポートしていません。
SELECT LENGTH(CONCAT(last_name,first_name)) AS 名前の長さ、
COUNT(*) AS 数値 FROM 従業員
GROUP BY name_length HAVING name_length > 5; 

#複数のフィールドでグループ化# 例: 各部門の従業員の平均給与を照会します (小数点以下 2 桁を保持します)。
SELECT ROUND(AVG(salary),2) AS 平均給与,department_id AS department,job_id AS 職種 FROM employees
部門、職種別にグループ化します。 

#並べ替えを追加#例: 各部門および各職種の従業員の平均給与を照会し、平均給与別に表示します。
SELECT ROUND(AVG(salary),2) AS 平均給与,department_id AS department,job_id AS 職種 FROM employees
GROUP BY 職種、部門 ORDER BY 平均給与 DESC; 

#ケース: クエリ部門は空にできず、各部門の各職種の従業員の平均給与が、平均給与に従って表示されます。
SELECT ROUND(AVG(salary),2) AS 平均給与,department_id AS department,job_id AS 職種 FROM employees
department_id が NULL ではない場合
GROUP BY 職種、部門 ORDER BY 平均給与 DESC; 

#ケース: クエリ部門は空にできません。各部門および各職種の従業員の平均給与は 10,000 を超えており、平均給与に従って表示されます。
SELECT ROUND(AVG(salary),2) AS 平均給与,department_id AS department,job_id AS 職種 FROM employees
department_id が NULL ではない場合
平均給与が 10000 を超える職種、部門でグループ化
ORDER BY averagesalary DESC; 

強化運動:

#1. 各 job_id の従業員の最大、最小、平均、合計給与を照会し、job_id の昇順で並べ替えます。
SELECT job_id、MAX(給与)、MIN(給与)、AVG(給与)、SUM(給与)
従業員から
ジョブIDでグループ化
job_id を ASC で並べ替えます。 

#2. 従業員の最高賃金と最低賃金の差を照会します (DIFFERENCE)。
MAX(給与) - MIN(給与) を差として選択します
従業員から;
=======================================================
SELECT MAX(給与) AS 最高、MIN(給与) AS 最低、MAX(給与)-MIN(給与) AS DIFFERENCE
従業員から; 

#3. 各マネージャーの従業員の最低給与を照会します。最低給与は 6,000 未満にすることはできません。マネージャーのいない従業員を含めることはできません。
SELECT MIN(給与),CONCAT(姓,名),マネージャーID
従業員から
manager_id が NULL ではない場合
GROUP BY マネージャーID
最低給与額が6000以上であること

これで、MySql 統計とグループ クエリは終了です。感覚がつかめない場合は、手動で練習することもできます。

夏の太陽はいつもとても明るくてまぶしいですが、もっと頻繁に日光浴をするとカルシウムを補給することもできます。そんなことを誰が考えたでしょうか? o(^▽^)o

これで、MySql のプロセス制御関数/統計関数/グループ化されたクエリの使用法の分析に関するこの記事は終了です。MySql のプロセス制御関数、統計関数、グループ化されたクエリに関するより関連性の高い記事については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLグループクエリ最適化方法
  • MySQL サブクエリとグループ化されたクエリ
  • MySQL グループ化クエリと集計関数
  • MySQLグループクエリGroup Byの実装原理の詳細な説明
  • MySQL のグループクエリと結合クエリステートメントの詳細な説明
  • 時間別にグループ化された MySQL クエリ ステートメント

<<:  Ubuntu 20.04 CUDA & cuDNN のインストール方法 (グラフィカル チュートリアル)

>>:  moment.jsの時間と日付の処理の詳細な説明

推薦する

Vue 初心者ガイド: 環境の構築と開始方法

目次初期ビューVue開発環境の構築Vueインスタンスの作成Vue テンプレート構文Vue データバイ...

フロントエンド開発に必要な共通ツール機能のまとめ

1. 時刻の書式設定とその他の方法moment.jsライブラリファイルの使用をお勧めします2. テン...

MySQL 8.0 redo ログの詳細な分析

目次序文REDOログの生成REDOログ送信REDOログの保存と通知ユーザースレッドに通知要約する序文...

CMDコマンドを使用してMySqlデータベースを操作する方法の詳細な説明

まず、mysqlサービスを開始および停止します ネットストップmysql ネットスタートMySQL ...

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...

この記事では、Vueのフロントエンドページングとバックエンドページングを実装する方法を説明します。

目次1: フロントエンドの手書きページング(データ量が少ない場合) 2: バックエンドのページング、...

CentOS での MySQL ワークベンチのインストールと設定のチュートリアル

この記事では、MySQL Workbenchのインストールと設定のチュートリアルを参考までに紹介しま...

グローバルトーストコンポーネントをカプセル化するVueの完全な例

目次序文1. vue-cliを使う1. Toastコンポーネントを定義する2. main.jsで設定...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

JS、CSS スタイルのリファレンスの記述

CS: ... 1. <link type="text/css" href...

MySQL sql_mode の変更が有効にならない理由と解決策

目次序文シナリオシミュレーション要約する序文最近、sql_mode の話題については何度も話し合われ...

HTML テーブルタグチュートリアル (21): 行の境界線の色属性 BORDERCOLOR

テーブルを美しくするために、行ごとに異なる境界線の色を設定できます。基本的な構文<TR 境界線...

優れたウェブサイトのコピーライティングと優れたユーザーエクスペリエンス

ウェブサイトを見るというのは、実は美しい女性を評価するようなものです。見た目を見るとき、私たちは見た...

Nginx 構成検出サービスのステータスを実装する方法

1. チェックステータスモジュールがインストールされているかどうかを確認します。 [root@loc...

Vue ElementUI は非同期読み込みツリーを実装します

この記事の例では、vue ElementUI の非同期読み込みツリーを実装するための具体的なコードを...