ホームページ > データベース > mysql チュートリアル > MySQL でデータセットの中央値を計算する方法

MySQL でデータセットの中央値を計算する方法

藏色散人
リリース: 2019-09-12 11:08:53
転載
6172 人が閲覧しました

一連のデータの中央値 (特定の地域または特定の企業の収入の中央値など) を取得するには、通常、このタスクを 3 つの小さなタスクに細分する必要があります:

1 。データを作成し、データの各行に全データの中での順位を与えます;

2. 順位の中央値を見つけます;

3. 対応する中間順位を見つけます;

の値以下では、企業の従業員の月収を例として、いくつかの複雑な MySQL ステートメントの使用法を説明します。

方法 1

テスト テーブルの作成

最初に収入テーブルを作成します。テーブル作成ステートメントは次のとおりです。

CREATE TABLE IF NOT EXISTS `employee` (
  `id`     INT                  AUTO_INCREMENT PRIMARY KEY,
  `name`   VARCHAR(10) NOT NULL DEFAULT '',
  `income` INT         NOT NULL DEFAULT '0'
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
INSERT INTO `employee` (`name`, `income`)
VALUES ('麻子', 20000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('李四', 12000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('张三', 10000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('王二', 16000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('土豪', 40000);
ログイン後にコピー

タスク 1

データを並べ替え、データの各行に全データの中での順位を付けます:

SELECT t1.name, t1.income, COUNT(*) AS rank
FROM employee AS t1,
     employee AS t2
WHERE t1.income < t2.income
   OR (t1.income = t2.income AND t1.name <= t2.name)
GROUP BY t1.name, t1.income
ORDER BY rank;
ログイン後にコピー

クエリ結果は次のとおりです:

MySQL でデータセットの中央値を計算する方法

小さなタスク 2

順位の中央値を見つける:

SELECT (COUNT(*) + 1) DIV 2 as rank
FROM employee;
ログイン後にコピー

クエリの結果は次のとおりです:

MySQL でデータセットの中央値を計算する方法

小さなタスク 3

SELECT income AS median
FROM (SELECT t1.name, t1.income, COUNT(*) AS rank
      FROM employee AS t1,
           employee AS t2
      WHERE t1.income < t2.income
         OR (t1.income = t2.income AND t1.name <= t2.name)
      GROUP BY t1.name, t1.income
      ORDER BY rank) t3
WHERE rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)
ログイン後にコピー

クエリの結果は次のとおりです:

MySQL でデータセットの中央値を計算する方法

# ここではつまり、一連のデータから中央値を取得する方法がわかりました。

方法 2

次に、ランキング ステートメントを最適化する別の方法を紹介します。

データ セットを並べ替える方法は誰もが知っています。この例では、実装方法は次のとおりです:

SELECT name, income
FROM employee
ORDER BY income DESC
ログイン後にコピー

クエリ結果は次のとおりです:

MySQL でデータセットの中央値を計算する方法

##さらに一歩進んで、クエリ結果に列を追加できますか? この列のデータはランキングですか?

この目標は、3 つのカスタム変数によって達成できます。

最初の変数は、データの現在の行の収入を記録するために使用されます。

2 番目の変数は、データの現在の行の収入を記録するために使用されます。データの前の行の収入

3 番目の変数は、データの現在の行のランキングを記録するために使用されます

SET @curr_income := 0;
SET @prev_income := 0;
SET @rank := 0;
SELECT `name`,
       @curr_income := income                                      AS income,
       @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,
       @prev_income := @curr_income                                AS dummy
FROM employee
ORDER BY income DESC
ログイン後にコピー

クエリの結果は次のとおりです:

MySQL でデータセットの中央値を計算する方法 ##次に、中央値のランキング番号を見つけて、さらに収入の中央値を調べます:

SET @curr_income := 0;
SET @prev_income := 0;
SET @rank := 0;
SELECT income AS median
FROM (SELECT `name`,
             @curr_income := income                                      AS income,
             @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,
             @prev_income := @curr_income                                AS dummy
      FROM employee
      ORDER BY income DESC) AS t1
WHERE t1.rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)
ログイン後にコピー

クエリ結果は次のようになります:

# #この時点で、中央値の問題を解決する 2 つの方法が見つかりました。花を散らします。

MySQL でデータセットの中央値を計算する方法推奨: 「

mysql チュートリアル

以上がMySQL でデータセットの中央値を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート