SQLでMedian(中央値)を求める方法を説明します。
テスト用テーブルの作成
SQL Chat を使い、テーブルを作るSQL文を生成してもらいました。(ChatGPTに聞いているのと同じ)

CREATE TABLE salary_info ( id INT NOT NULL AUTO_INCREMENT, employee_id INT NOT NULL, salary INT NOT NULL, bonus INT NOT NULL, allowance INT NOT NULL, tax INT NOT NULL, total_salary INT NOT NULL, payment_date DATE NOT NULL, PRIMARY KEY (id) );
データの登録
insert文も SQL Chatにお願いしてみた。正解にいたるまで、いろいろエラーになる回答を出してきましたね。

DELIMITER // CREATE PROCEDURE insert_salary_info() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 100000 DO INSERT INTO salary_info (employee_id, salary, bonus, allowance, tax, total_salary, payment_date) VALUES ( FLOOR(RAND() * 1000) + 1, FLOOR(RAND() * 500000) + 100000, FLOOR(RAND() * 100000), FLOOR(RAND() * 50000), FLOOR(RAND() * 100000), (salary + bonus + allowance) - tax, DATE_ADD('2021-01-01', INTERVAL FLOOR(RAND() * 365) DAY) ); SET i = i + 1; END WHILE; END // DELIMITER ; CALL insert_salary_info();
Median 関数の本当の方法
中央値はMedian関数を使います。distinctしないと行数文出力されるから、注意しましょう。over()に何も指定しないと全行に対する中央値となります。
MariaDB [sqlchat]> select distinct median(salary) over() from salary_info; +-----------------------+ | median(salary) over() | +-----------------------+ | 349909.0000000000 | +-----------------------+ 1 row in set (0.105 sec)
SQL ChatのMedian求め方
SQL Chatは、Median関数ではなく、ずいぶん複雑なSQLを出してきました。このあたり、まだまだですね。

しかも間違い

