質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

515閲覧

HAVING句でのメジアンの求め方。についての質問

happy_boy

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2022/03/01 05:57

編集2022/03/01 08:55

SQLで中央値を求める以下の方法について質問です。

https://teratail.com/questions/73702

テーブル名:Graduates
列はincomeのみ、10行。
|income|
10,000
10,000
10,000
15,000
15,000
20,000
20,000
20,000
30,000
400,000

以下のsqlで、なぜ「Graduatesの5列目の値+6列目の値/2」
を求めることができるのかわかりません。

SELECT AVG(DISTINCT income)
FROM (SELECT T1.income
FROM Graduates T1, Graduates T2
GROUP BY T1.income
--S1の条件
HAVING SUM(CASE WHEN T2.income >= T1.income THEN 1
ELSE 0 END) >= COUNT() / 2
--S2の条件
AND SUM(CASE WHEN T2.income <= T1.income THEN 1
ELSE 0 END) >= COUNT() / 2) TMP;

例えば下記のようなデータがあり、Aの中央値とBの中央値をそれぞれ求めたいときはどのようにすればよいでしょうか?

datekindsincome
2/3A1000
2/3B500
2/4A1800
2/4B2000
2/5A700
2/5B1300
2/6A1100
2/6B1000

サブクエリでorder by や group byを使うのかなと考えたのですが良い案が思い浮かばず聞かせていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2022/03/01 07:25

偶数の要素数の場合は中央2値の平均ということでよいのですか? (サンプルの要素数が奇数個なので)
happy_boy

2022/03/01 08:54

偶数なら2値の値の平均でお願いしたいです。 ご確認ありがとうございます。
guest

回答2

0

直接の回答ではありませんが、
SQLの中央値(Median) にMySQLでの使い方も載っています。

medeian の発音 は気にした方が良いです。(参照元が悪かったですが)

投稿2022/03/01 12:48

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

happy_boy

2022/03/02 00:30

->SQLの中央値(Median) このようなサイトがあるのですね。ご教授いただきありがとうございます、参考にしてみます。 medianに関しては、日本では広く中央値、またはメジアンとして知られており特に問題はないです。 英語の発音と日本語の表記はまた別の問題です。
guest

0

やりかたはいろいろあると思いますが、たとえば以下のようなクエリはどうでしょうか?

SQL

1SELECT kinds, AVG(income) 2FROM ( 3 SELECT 4 kinds, 5 income, 6 ROW_NUMBER() OVER (PARTITION BY kinds ORDER BY income) i, 7 (SELECT COUNT(*) FROM T T2 WHERE T1.kinds = T2.kinds) n 8 FROM T T1 9) U 10WHERE (n % 2 = 0 AND i = n DIV 2) 11 OR (n % 2 = 0 AND i = n DIV 2 + 1) 12 OR (n % 2 = 1 AND i = n DIV 2 + 1) 13GROUP BY kinds

投稿2022/03/01 12:31

neko_the_shadow

総合スコア2230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

happy_boy

2022/03/02 00:22

すみません、テーブル名を設定するのを忘れておりました。 とても初歩的な質問で恐縮なのですが、FROM句の"U"はテーブル名のTとは違うのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問