タグ付けされた質問 「order-by」

クエリ結果をソートするためにSQL SELECTステートメントで使用される句。

1
結合を使用すると、SQL Serverはどのように結果を並べ替えますか?
SQL Serverは、クエリ実行の結果セット内のレコードの順序をどのように把握しますか? 頭や尻尾を作ろうとしているのですが、頭をひっかいています。フィールドを変更すると、選択する順序も変更されます。以下のSQLをaで実行するとSELECT *、同じレコードが取得されますが、順序が大きく異なります。 SELECT TOP (900) AD.ATTACHMENTID, AD.NAME, AD.ISINLINE, AD.INSERTEDDATETIME, ATMT.ATTACHMENTBLOB, U.UFID FROM ATTACHMENTDETAIL AD WITH (NOLOCK) INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID …

3
SELECT ROW_NUMBER()は、生成された行番号でソートされた結果を返すことが保証されていますか?
たとえば、SQLクエリについて考えてみましょう。 SELECT A.[Name], ROW_NUMBER() OVER(ORDER BY A.[Name] ASC) FROM [FooTable] AS A ここでは、A。[Name]でソートされて返される結果を観察します。ROW_NUMBER関数で定義されたソート列を別の列に変更すると、結果はその列でソートされます。 行番号が行に割り当てられることを期待していましたが、同じ基準で行がソートされて戻ってくるとは思っていませんでした。これは単にクエリがどのように実行されているか(SQL Server 2008 R2の場合)の副作用ですか、それともこの動作は保証されていますか?(私はそのような保証への言及を見つけることができませんでした)。

3
2つ以上の列の条件付き順序を作成する方法
MS SQL Server 2005では、条件付き並べ替えを使用して1つのクエリを作成していますが、2つの列を使用して条件付き並べ替えを行う方法がわかりません。 私がこのようなコードを書いた場合、それは正常に動作しています select * from table order by case @pkr when 'kol' then kol when 'nci' then nci end 2つ以上の列の条件付き順序を作成する方法がわかりません select * from table order by case @pkr when 'KOL-NCI' then kol,nci when 'kol-MPCI' then kol,mpci end 動的TSQLを作成して使用するアイデアがありますが、sp_executesqlまだより良いアイデアを探していますか?

2
結合されたテーブルの列によるソートを最適化する方法はありますか?
これは私の遅いクエリです: SELECT `products_counts`.`cid` FROM `products_counts` `products_counts` LEFT OUTER JOIN `products` `products` ON ( `products_counts`.`product_id` = `products`.`id` ) LEFT OUTER JOIN `trademarks` `trademark` ON ( `products`.`trademark_id` = `trademark`.`id` ) LEFT OUTER JOIN `suppliers` `supplier` ON ( `products_counts`.`supplier_id` = `supplier`.`id` ) WHERE `products_counts`.product_id IN (159, 572, 1075, 1102, 1145, 1162, 1660, 2355, …
10 mysql  order-by 

2
サブクエリでのORDER BYのデータベース実装
SQLステートメントをラップするアプリケーション(MapServer- http://mapserver.org/)を使用しているため、ORDER BYステートメントは内部クエリにあります。例えば SELECT * FROM ( SELECT ID, GEOM, Name FROM t ORDER BY Name ) as tbl アプリケーションには、さまざまなデータベースドライバーがあります。主にMS SQL ServerドライバーとSQL Server 2008を使用しています。サブクエリでORDER BYが見つかった場合、エラーがスローされます。 MSドキュメントから(これはSQL Server 2000の場合ですが、まだ適用されているようです): ビュー、インライン関数、派生テーブル、またはサブクエリでORDER BY句を使用する場合、順序付けされた出力は保証されません。代わりに、ORDER BY句は、Top演算子によって生成される結果セットの構成が一貫していることを保証するためにのみ使用されます。ORDER BY句は、最も外側のSELECTステートメントで指定されている場合にのみ、順序付けされた結果セットを保証します。 ただし、Postgres(9)およびOracleで実行した場合、同じタイプのクエリが結果を返します-サブクエリで定義された順序で。Postgresでは、クエリプランは結果がソートされていることを示し、Postgresのリリースノートには、サブクエリの順序が使用されることを意味する項目が含まれています。 サブクエリORDER BYが上位クエリと一致する場合はソートを回避 http://en.wikipedia.org/wiki/Order_byの状態: 一部のデータベースシステムでは、副選択またはビュー定義でORDER BY句を指定できますが、そこに存在しても効果はありません。 ただし、クエリプランの私自身のチェックから: SQL Server 2008はサブクエリでのORDER BYをサポートしていません Postgres 9はサブクエリでのORDER BYをサポートしています Oracle 10gはサブクエリでのORDER BYをサポートします だから私の質問は、PostgresとOracleがサブクエリでの並べ替えを許可していないことを正式に確認または否定できるリンクはありますか?

2
配列を含むjsonbキーの並べ替え順序をカスタマイズする
PostgreSQLにいくつかのデータを含むテーブルがあります。 create table t2 ( key jsonb, value jsonb ); INSERT INTO t2(key, value) VALUES ('1', '"test 1"') ,('2', '"test 2"') ,('3', '"test 3"') ,('[]', '"test 4"') ,('[1]', '"test 5"') ,('[2]', '"test 6"') ,('[3]', '"test 7"') ,('[1, 2]', '"test 8"') ,('[1, 2, 3]', '"test 9"') ,('[1, 3]', '"test 10"') ,('[1,2,4]', …

1
MySQL:内部クエリで「ORDER BY」を使用してUNIONを最適化する
同じレイアウトの複数のテーブルで構成されるロギングシステムをセットアップしただけです。 データソースごとに1つのテーブルがあります。 ログビューアについて、私はしたいです UNIONすべてのログテーブル、 アカウントでそれらをフィルタリングし、 ソースを識別するための疑似列を追加し、 時間順に並べ替え、 そして、ページ分割のためにそれらを制限します。 すべてのテーブルにzeitpunktは、インデックス付きの日付/時刻列であるというフィールドが含まれています。 私の最初の試みは: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730) ORDER …

3
可能な限り一致するものをクエリして順序付け
私はこれらの行に沿ってクエリを書こうとしています: select * from tbl where col1 = 1 and col2 = 2 and col3 = 3 order by ... ; 最初に3つのWHERE条件すべてが一致するすべての結果(3/3)、次に任意の2つの条件が一致するすべての結果(2/3)、最後に任意の1つの条件が一致する結果(1/3)が必要です。 これら3つの結果セットのそれぞれは、によって順序付けされる必要があります(col4, col5, col6)。 単一のクエリでそれを実行できますか? 例えば: サンプルhttp://img708.imageshack.us/img708/1646/sampletableresult1.jpg テストデータを作成するスクリプト: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') AND type in (N'U')) DROP TABLE [dbo].[MyTable] GO CREATE TABLE dbo.MyTable …

2
mysqlがクエリによる注文に間違ったインデックスを使用するのはなぜですか?
以下は、約10,000,000行のデータを持つ私のテーブルです CREATE TABLE `votes` ( `subject_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `subject_id` int(11) NOT NULL, `voter_id` int(11) NOT NULL, `rate` int(11) NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`subject_name`,`subject_id`,`voter_id`), KEY `IDX_518B7ACFEBB4B8AD` (`voter_id`), KEY `subject_timestamp` (`subject_name`,`subject_id`,`updated_at`), KEY `voter_timestamp` (`voter_id`,`updated_at`), CONSTRAINT `FK_518B7ACFEBB4B8AD` FOREIGN KEY (`voter_id`) REFERENCES `users` (`id`) ) …

2
DB2は主キーでデータを並べ替えますか
列順が主キーと同じだったので、プロダクションクエリからorder by句を削除しようとしている同僚と最近話し合いをしました。 彼が主キーに基づく順序を保証できないことを説明しようとした長い議論の後、最終的な結論は、MSSQLクエリの変更を要求するつもりはないということでした。 しかし、彼はまだDB2クエリを変更する予定でした。 DB2が主キーでクエリを順序付けすることを証明する記事はすぐには見つかりませんでした。現在、それがそうであるかどうか疑問に思っています。 だから私の質問は、order by句がない場合、DB2はどのようにクエリを並べ替えるのですか?主キーを使用していますか? 並列システムで、order by句なしでデータが正しく順序付けられて出力されることをどのように保証できますか?
8 db2  order-by 

5
最後に特殊文字を含むOracleソートvarchar2列
OracleでVarchar2またはNVarchar2列を独自のカスタム定義の順序に並べ替えるにはどうすればよいですか。または、最初に文字、次に数字、次にすべての特殊文字を配置する既存のオプションがあります。 最初のアプローチは、文字を数字に手動でマッピングする関数を使用することでした。 select id, sorted_column from some_table order FN_SPECIAL_SORT_KEY(sorted_column,'asc') 特殊なソート関数は、各文字を2桁の数値にマップし、戻り値はソートに使用されます。これは本当に高額な連結であるように見え、間違っているように感じます。 for i in 1..length(sorted_text) loop v_result:=v_result || case substr(sorted_text,i,1) WHEN ' ' THEN 82 WHEN '!' THEN 81 WHEN '"' THEN 80 WHEN '#' THEN 79 WHEN '$' .............. WHEN 'u' THEN 15 WHEN 'U' THEN 15 WHEN 'v' THEN …

4
MySQLで複雑なGROUP BYを実行するにはどうすればよいですか?
他のテーブルへのいくつかのキーを含むテーブルがあります(各キーは複数の列で構成されています)。等しいキーを持つ行をグループ化したいのですが、それらすべてをグループ化したくありません。それは単純なGROUP BYキーではなく、たとえば10のグループを作成できるようにしたいのです。したがって、特定のキーが50回表示された場合、このグループ化(5グループの10)を実行すると5つの結果が得られます。また、このグループ化をキー内でランダムに発生させます。 私はこれを行う直接的な方法を知りませんでした、そして私が思いついたラウンドアバウト方式は私が思っているように機能していません。私が思いついたラウンドアバウト交差点の解決策は、値がそのキーiのith出現を(ただしランダムな順序で)表すような整数である各キーの新しい列を作成することでした。次に、整数の除算を行って、キー内のすべてのn(たとえば10)行が同じ値になるようにし、GROUP BYその値に対してa を行うことができます。 今説明したことを達成するためのより直接的な方法はありますか?これはかなり厄介で、新しいインデックス列を作成するときに問題が発生しました(この質問で説明したように)。 編集:まず、これはMySQL用であることに注意してください。目標が明確でない場合に備えて、例を追加します。MySQLのドキュメントはほとんどそこに到達する方法を示しています: CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; これは、私が望むものではありませんが、近くなるテーブルを作成します: +--------+----+---------+ | grp | id …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.