- ベストアンサー
GROUP BYについて
- GROUP BYに関してつまずいています。色々と調べているのですが、解決できないため質問させて下さい。
- タイトルを指定し、且つ日付を範囲指定した時、その会員の名前、そして投稿した日付を一覧で表示したいと考えていますが、その際のSQL文が分からず困っている状況です。
- 実は昨夜からずっと悩んでいたりして・・・
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
技術的な話になると微妙ですが結論からいえばサブクエリが問題になることはまずありません じつは今回のSQLも select member_no ,member_name,max(title2) as max_title2 from member inner join rireki on rireki_member_no=member_no where title2 between '2014-09-13' AND '2014-09-19' と書くとわずかに効率的になるのですが、本来のSQLの書き方からいうと じゃっかんズルをしているところがあるのであまりお勧めしません。 いずれにしてもきちんとインデックスを設定しておけば、スピードに大差はないでしょう。 どうしてもカリカリにチューニングをしなくてはいけない場合に 調整項目としてはサブクエリを除外する検討が必要になってくるかもしれません
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
#1さんの回答にもあるように結果がちがいますよね? 1 佐藤 2014-09-19 3 佐々木 2014-09-14 とりあえずこんな感じ? select member_no ,member_name,max_title2 from member inner join (select rireki_member_no,max(title2) as max_title2 from rireki where title2 between '2014-09-13' AND '2014-09-19' group by rireki_member_no) as sub on member_no=rireki_member_no;
お礼
yambejpさん、こんばんは。 御親切なご回答ありがとうございます。 結果のご指摘、、仰る通りでした。 SQL文のご提示ありがとうございます! 勉強させられます。 ところで、yambejpさんから回答頂くまで、質問文中に記載しているサイトに、「サブクエリは、データ量の増加と比例し検索に時間がかかる....」といった発言が気になったため、サブクエリやGroup Byは使わず、一度全てのデータを吐き出し、その過程で(PHPで操作しているので)必要なデータのみ配列に代入させる方法を考えていました。 そこで改め質問なのですが、質問文中にあるサイトに記載のあるように、サブクエリはデータ量の増加に伴い負荷が掛ってしまうのでしょうか? もちろんテーブルの構造等を含め色々な要素が絡むとは思いますが、一般論として、またいちご意見として伺えれば幸いです。 お忙しいなか恐縮ですが宜しくお願い致します。
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
select member_no,member_name,title2 from member inner join rireki on rireki_member_no=member_no where title2 between '2014-9-13' and '2014-9-19' です。ただし、結果は質問の結果と異なります。また、GROUP BYの質問のようですが、集計する物が無いので不要と思います。
補足
nharasawaさん はじめまして。ご親切な回答ありがとうございます。 Group Byは必要ないとの事ですが、テーブルrirekiのrireki_member_noカラムは 重複データがあり、重複している場合は新しい日付を抽出対象としたいと考えている事あり、 以下のサイトが一番近いと考えておりました。 引続きアドバイスのほど頂戴出来ると幸いです。 http://norm-nois.com/blog/archives/1293
お礼
yambejpさん、こんばんは。 お返事が遅くなり申し訳御座いません。 サブクエリの件、そうなんですね。 とてもありがたいアドバイスだと思ってます。 貴重なアドバイスをありがとうございました。