• ベストアンサー

SQL文を教えてください

mysql4.0.26を使ってます。 集約関数について勉強しているのですが、どうしてもわからないことがあるので教えてください。 あるフィールドに整数が入っている時に、そのフィールドをソートして上から20%と下から20%のレコードを排除した真ん中の80%のデータの平均値を求めるというSQLはどのように書けば良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ソートしてから集計するのは本来SQLがやることではありません。 無理やり以下のようにやることもできますが、 あまりスピードなどは期待できません。 ちなみに上から20%と下から20%を除くと80%にはなりません 10%ずつ引きたいのか、60%だけ残したいのか、はっきり させたほうがよいでしょう。 (以下は60%だけのこした例) SET @no=0; CREATE TEMPORARY TABLE `temp_table` SELECT *,@no:=@no+1 as`no` FROM `テーブル` order by `データ`; SELECT count(`データ`),avg(`データ`) FROM `temp_table` where `no`>=@no*0.2 and `no`<=@no*0.8

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

課題の丸投げですか? →課題の丸投げは、規約違反で削除されます。 それとも、自分で思いついた課題ですか? MySQL 4.0では、複数のSQLで行うしかありません。 MySQL 4.0で実行できるSQLを教えて欲しいということで、いいのでしょうか? 自分で考えた部分は、まったくないのですか?

ORmituhide
質問者

補足

ごめんなさい。質問の仕方が悪かったので後悔しておりました。 しかも質問文も間違っていました。 sql文に何パーセントとか指定して取得することができる関数があれば知りたかったのですが、今は全体の件数を取得して割って…という感じでやっているので。 しかし、規約違反ということなので削除してもらいます。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A