今回は、Silverの「開発/SQL - SELECT文」からの出題です。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2012年12月12日
一般にSELECT文は行を返す時の順番を保証しませんが、ORDER BY句をつけることで、そこで指定した列の値でソートして表示することになります。
列名だけ指定、あるいは列名の後にASCと指定すれば昇順、列名の後でDESCと指定すると降順になります。
例題のSELECT文ではval2の値で降順でソートし、val2の値が同じ行についてはval1の値で昇順にソートします。val1もval2も同じ場合は(例題では該当するケースがありませんが)、それらがどういう順序で表示されるかは不定となります。
PostgreSQLではSELECT文で返される行の一部だけを表示するため、LIMIT句、OFFSET句を使うことができます。LIMITで指定した行数だけを表示するので、例題の場合は1行だけ表示します。OFFSETがなければ先頭の1行を表示しますが、OFFSET句があると、そこで指定した行数をスキップして、次の行を表示します。
つまり、例題の場合は、ソートした後、3行をスキップしますから、4行目のデータを表示することになります。
まず、val2の値で降順にソートすると、先頭はval2=5の行(id=8)、続いてval2=3の行が3行(id=3, 5, 6)ということになります。val2=3の行をval1で照準にソートして3番目になる、つまり全体で4番目になるのはval1=3の行、すなわちid=6の行です。
従って正解は 6 です。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.