• 締切済み

ORDER BY RAND()でのソート

agricapの回答

  • agricap
  • ベストアンサー率40% (79/195)
回答No.2

当てずっぽうです。手元にOracleがないので、正確にはわかりません。 エラーになるかもしれません。 SELECT A.* FROM table A,   (SELECT status, rand() as ran FROM (SELECT DISTINCT status FROM table)) B WHERE A.status = B.status ORDER BY B.ran

関連するQ&A

  • ORDER BY RAND() 後のソートの方法

    ORDER BY RAND() でランダムにし、その後ソートをかけたい場合どうすればいいでしょうか? フィールドが名前、優先度とし 山田 | 0 加藤 | 1 佐藤 | 0 鈴木 | 1 中村 | 1 中田 | 1 大黒 | 1 川口 | 1 とあった場合にランダム表示して優先度1がきて優先度0がその下に常に来るようにしたいのです。 表示例1) 鈴木→中村→大黒→川口→加藤→中田→山田→佐藤 表示例2) 大黒→加藤→川口→鈴木→中田→中村→山田→佐藤 ランダム表示で優先度でソートするという感じの表示になればいいのです。 レコード数はそんなに多くないので、なんちゃってランダムでもいいのですが。。。 ご教授いただければ幸いです。

    • ベストアンサー
    • MySQL
  • rand()を使った場合の全件ソートを避ける方法ありますか?

    test1とtest2の結合しtest2にしかない複数のレコードから ランダムにc_idを取得したいのですがtest2で全件ソートしています。 もう少し、効率的な書き方はあるでしょうか? SELECT A.*, B.c_id FROM test1 A INNER JOIN (select a_id,b_id,c_id from test2 order by rand()) as B ON A.a_id = B.a_id AND A.b_id = B.b_id WHERE いろいろ GROUP BY いろいろ

  • GROUP BYによる集計後のソートの高速化にアイデアはないでしょうか?

    ウェブサービスはいろいろ作ったことはあるのですが、分析系は作ったことがなく、DB構造について悩んでるところであります。 現在の課題は、商品ごとの売り上げ集計後に、それをランキング表示して表示する、というところなんですが、 select 商品ID,SUM(売り上げ)as`sales` from 売り上げテーブル group by 商品ID order by sales DESC limit 0,30 というものですが、やはり sales にインデックスが使えないのでtemporary table と file sort がでてきて遅くなってしまいます。 order by をはずすとやはり高速にレスポンスは返ってきます。 日別、月別、などのサマリーテーブルは作ってはいるのですが、単月ではなく、複数月指定での集計だとサマリーはないので集計をしないといけなくなります。 基本的なことなんだと思いますが、諸先輩方はどういったやり方で解決されておられるのでしょうか? なお、試験段階の現在は、売り上げテーブルには400万件、商品データは6万件あります。ですので、order by をはずした場合、6万件ほどがヒットし、それを(file sortで)並び替えてる状態だと思います。

  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 社員IDのソート

    社員IDの桁が混在しています。 社員IDでorder byすると 0001 0011 100 1200 123 1234 321 となります。これを 100 123 321 0001 0011 1200 1234 と桁数別にソートしたいと考えています。 ちなみにVARCHARです。 order by 以下うまくソートする方法が知りたいです。 お願いします。

  • GROUP BY/ORDER BYの併用で期待するORDERが得られま

    GROUP BY/ORDER BYの併用で期待するORDERが得られません。 データベース初心者です。よろしくお願いいたします。 table id group_id name 1 1 冷蔵庫1 2 2 カメラ1 3 2 カメラ2 4 2 カメラ3 5 3 テレビ1 のようなテーブルを、group_idでグループ化し、idの大きい順に並べた以下のようなデータ id group_id name 5 3 テレビ1 4 2 カメラ3 1 1 冷蔵庫1 を取得しようとして悩んでおります。 SELECT MAX(id) AS max_id, id, group_id, name FROM table GROUP BY group_id ORDER BY max_id DESC というクエリですと max_id id group_id name 5 5 3 テレビ1 4 x 2 y 1 1 1 冷蔵庫1 という結果が得られますが、xとyところが、期待するx=4、y=カメラ3とならないケースがあります。 いくつかのテーブルで試しましたが、期待する結果になるものとならないものがありました。 例えばこれを自己結合することも考えたのですが、WHERE句にASで命名した「max_id」が含まれると「max_idが不明」というエラーが出ます。 MySQLのバージョンは4.0.xでして、サブクエリーが使えません。 このような状況で、何か方法がございましたらご教授のほどお願い申し上げます。 「期待する結果がクエリ1回で得られない」ということを知れるだけでも構いません。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • array_randを使いたい?

    phpでarray_randを使ってCSVのデータをランダム表示させたいです。 phpの知識がなくどのようにすればいいかわかりません。 CSVは id,商品名,説明文,価格,画像URL,リンク先URL, こんな感じになっています。 いろいろと調べてランダムにするにはarray_randを使えばいいのがわかったのですが、どのようにPHPを書けばいいかわかりません。 すいませんが、詳しく教えていただけないでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • ORDER BYで並び替えなんですが…

    $result = mysql_query('SELECT * FROM hoge ORDER BY LPAD(NUMBER, 5, 0)') ; で並び替え(ソート)をすると 1 2 3 4 5 6 7 8 9 a 10 11 12 13 という結果で表示されます。 これを 1 2 3 4 5 6 7 8 9 10 11 12 13 a というように並び替えて表示させたいのですが…orz どのように構文を書けば宜しいのでしょうか?? いろいろ調べてみたのですが、それらしい内容のものが 見つからずに途方に暮れています。 どなたか御教授頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • TABLE内の行をランダムに半減させたい。

    あるテーブル(table)の行をランダムに半減させたいと思っています。 このテーブルのキーは、instance_idとuser_idです。 つまり、同一userが複数のinstanceを持ち、同一のinstanceが複数のuserに所持されうるというテーブル構成になっています、 今、行数は200あるとしますと、 delete from table where insance_id IN (select insance_id from table order by random() limit 100) としますと、tableの行が半減するわけではなく、同一instanceが複数userに所持されますので、もっと行数が減ってしまいます。 そこで、 # delete from table where instance_id AND user_id IN (select instance_id , user_id from table order by random() limit 100); というようなことをしたのですが、 ERROR: subquery has too many columns と出てしまいます。 2時間ほど、Webで調べて頑張ったのですが、よくわからないので、 これを実現するSQL文をお教えいただけませんか。 どうか、よろしくお願いいたします。

  • SQL-SELECT文でのソート

    VB2010とmdb(Ms-Access)にてシステムを構築しています。 Select文にて取得したレコードをDatagridviewにて表示しようとしているのですが SQL="SELECT * FROM table ORDER BY ID" 当のシンプルなものだと表示できるのですが 特定の文字列順にソートしたくCASE WHENを使用して SQL = "SELECT * FROM table ORDER BY CASE BUPPIN WHEN '○○' THEN 1 WHEN '△△' THEN 2 ELSE 0 END" のようにSQLを書いてみたのですがデータアタプタにてデータテーブルに結果を入力させる際にエラーが出てしまいます。 構文間違いでしょうか? ご教授お願いします