• ベストアンサー

PHP SQL 問合せについて

SQLについて質問いたします。SQL 全般でも結構です。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか?

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

>「果物の出現回数が多い順に並べる」 ということなら、 select * from tableA x order by (select count(*) from tableA y where y.name = x.name ) ,No とか、 select x.no,x.name from tableA x, (select y.name,count(*) cnt from tableA y group by y.name ) z where x.name = z.name order by z.cnt,x.No とか。 DBにより多少変わるかも。(as句が必要だったりとか・・・)

koyuhi
質問者

お礼

ご回答、ありがとうございました。 色々と調べ、勉強になりました。 PHPではAS句必要なしですね。 結局、構文エラーが原因で、正しい結果が得られませんでした。 No3がドンピシャの回答で、正しい結果が求められました。 感謝!感謝!です。

koyuhi
質問者

補足

ご回答、ありがとうございます。 確認しましたが、SQLエラーとなりました。 tableA x / tableA y ・・この辺りの理解不足ですが。 参考文献のアドレス or 説明をお願します。 countを使用する限り、出現回数が求まる気がしますが・・ もう少し、他の回答を待ちます。

その他の回答 (2)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

nameが、「ばなな」「りんご」「みかん」しかないか あっても他は無視して最後にNo順にだせばいいなら select * from tableA order by case name when 'ばなな' then 1 when 'りんご' then 2 when 'みかん' then 3 else 4 end,No 普通は、nameと表示順を持つテーブルを作って結合します。 ('いちご'とかが出てきたときに対応しやすいため。)

koyuhi
質問者

補足

回答頂き、ありがとうございます。 言葉たらずでした。追加質問です。 「果物の出現回数が多い順に並べる」(出現回数ではなく、全ての結果を、name,noで出力です) 上記以降 ぶどう、パイン・・あります。(他は無視しません。) 再度、お願いいたします。

回答No.1

select No,name from table_name ORDER BY name,No としますが、nameは文字コードの小さい順になるので「ばなな」「みかん」「りんご」の順になります。

koyuhi
質問者

補足

ご回答、ありがとうございます。 No1同様です。 文字コードの小さい順ではなく、「出現の多い順に、name,noで全ての結果を得るには?」を補足します。 出現回数ではありません。(count は理解しています) 再度、お願いいたします。

関連するQ&A

  • PHP SQL 問合せについて

    PHP SQL 問合せについて http://okwave.jp/qa/q7689206.html での質問の続きとなります。 No,name 1,ばなな 2,りんご 3,ばなな 4,みかん 5,ばなな 6,りんご 上記テーブルで 1,ばなな 3,ばなな 5,ばなな 2,りんご 6,りんご 4,みかん の結果を得るSQLはどのように記述すればよいでしょうか? 回答 select * from tableA x order by (select count(*) from tableA y where y.name = x.name ) ,No で解決していますが、 select * from tableA x where name ='果物' とした場合、結果が異なります。 (結果が多い順にならない) 出現回数が多い順に並べるには、どのような記述になりますか? データには「果物以外のデータが含まれている」とします。 宜しくお願い致します。

    • 締切済み
    • PHP
  • SQLで乱数を使った取得の工夫

    お世話になります。 ID,name,point 1.りんご.30 2.みかん.22 3.いちご.18 4.バナナ.13 5.すもも.4 6.マンゴー.1 上記のようなデータがある場合、pointが高いほど 選ばれ易くするようなSQLを記述したいのですが、 その方法をお教えいただけないでしょうか。 ただのランダムであれば、『SELECT * FROM テーブル名 WHERE ID=abs(random()%全レコード数(この場合は6)+1』と すれば、均等にランダムで拾えますが、これを1のりんごのIDほど 取得しやすく、6のマンゴーほど発生しにくくするといった感じです。 以上、よろしくお願いいたします。

  • 行数をカウントするSQLにつきまして

    行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから りんご=3(行) みかん=2(行) メロン=1(行) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 1     りんご 100 2     りんご 100 3     りんご 100 4     みかん 150 5     みかん 150 6     メロン 250

  • 行数をカウントするSQLにつきまして

    行数をカウントするSQLにつきまして いつもお世話になっております。 下記の売上テーブルから みかん=3(行目) というようなデータを抽出するSQLはどのように記述したら良いのでしょうか? ・・・・売上テーブル・・・ 売上番号 品名 単価 101   りんご 100 102   りんご 100 103   みかん 150 104   りんご 100 105   みかん 150 106   メロン 250 postgre8.3のためrow_numberが使えません

  • SQL文について教えてください。

    お世話になります。 テーブルを3つ作りました ユーザーテーブル:USER_MS USE_NO USER_NAME 001   太郎 002   次郎 003   三郎 品名テーブル:HINMEI_MS HINMEI_NO HINMEI_NAME 001    りんご 002    みかん 003    イチゴ 嫌いなものテーブル:KIRAI_TR KIRAI_NO USER_NO HINMEI_NO 001001  001   001 002003  002   003 002001  002   001 ※KIRAI_NO=USER_NO.HINMEI_NO と連結してプライマリーキーにした ここで、次郎の嫌いなものを抽出するときには $USER_NO = '002'; $SQL ="SELECT * FROM KITAI_TR A,HINMEI_MS B WHERE A.USER_NO = '$USER_NO'; で抽出できるのですが、 次郎の嫌いでない002みかんだけを抽出するSQL文がわからず苦慮しています。 以前、オラクルでSQLを使ったことがあったのですが、その時はFROM句の後に(SELECT * FORM・・・・) Bなどと書くと通ったのですがMYSQLでは通りませんでした。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLの条件検索について

    下記のような「果物TBL」というテーブルがあるとします。 果物TBL -------------------------------- ID    名前      値段 - - - - - - - - - - - - - - - - - - - - 01    りんご     150 02    バナナ     250 03    みかん     250 04    ぶどう     300 -------------------------------- また上記のテーブルと全く同じ構成の「果物検索TBL」というテーブルがあるとします。 そのテーブルには、例として下記のような値を入れておきます。 果物検索TBL -------------------------------- ID    名前      値段 - - - - - - - - - - - - - - - - - - - - NULL   りんご     250 NULL   バナナ     NULL -------------------------------- この時、下記のようなSQLだと SELECT DISTINCT 果物TBL.名前 FROM 果物TBL INNER JOIN 果物検索TBL ON (果物TBL.ID = 果物検索TBL.ID AND LEN(果物検索TBL.ID) > 0) OR (果物TBL.名前 = 果物検索TBL.名前 AND LEN(果物検索TBL.名前) > 0) OR (果物TBL.値段 = 果物検索TBL.値段 AND LEN(果物検索TBL.値段) > 0); -------------------------------- 名前 - - - - - - - - - - - - - - - - - - - - バナナ みかん りんご -------------------------------- という結果になります。(名前:りんご・バナナと値段:250のOR検索) その結果を -------------------------------- 名前 - - - - - - - - - - - - - - - - - - - - バナナ -------------------------------- という結果にするにはどうすればいいでしょうか?(名前:りんご・バナナと値段:250のAND検索、バナナのみマッチ) 単純にORをANDにしてもうまくいきませんでした。 動的にSQLを作れれば良いのですが、この構成は変えられないのでNULL値がネックになり分かりません。 教えてください。 また、記載してるSQLよりもっとスマートな書き方があれば教えてください。

  • 結合SQLに関して

    結合SQLに関して ある3つのテーブルが存在し、TABLE1の情報を核として、TABLE2,TABLE3と 結合させて情報を取得しようと考えています。 TABLE1とTABLE2だけであれば LEFT OUTER JOIN等を駆使すれば、TABLE1を核として 全件表示可能かと思いますが、TABLE3も含めて結果のような形にしたい場合は、 どのようにSQLを記述すれば良いでしょうか。。。。 初歩的な質問で申し訳ありませんが、教えて下さい。 TABLE1 NO 1 2 3 TABLE2 NO,BUSYO_CODE 1,123 2,123 3,456 TABLE3 BUSYO_CODE,BUSYO_NAME 123,総務 456,経理 結果 NO,BUSYO_CODE,BUSYO_NAME 1,123,総務 2,123,総務 3,456,経理 よろしくお願いします。

  • SQLite3にて重みづけを行った抽選のSQL

    お世話になります。 前回の質問にて、説明不足でしたので、 改めて質問させていただきました。 ID,name,point 1.りんご.30 2.みかん.22 3.いちご.18 4.バナナ.13 5.すもも.4 6.マンゴー.1 上記のようなデータがある場合、pointが高いほど 選ばれ易くするような重みづけのある抽選のSQLを 記述したいのですが、その方法を お教えいただけないでしょうか。 データベースはSQLite3(必須)を使用しています。 使用する言語はJava、C#を検討していますが、 極力コードには依存せずに、SQLiteだけで 完結させたいと考えています。 サンプルなどを掲示していただけますと幸いです。 以上、よろしくお願いいたします。

  • SQLを教えてください

    下記2つのテーブルを検索して、結果のようなデータを取得したいと考えております。 tableBのitemnoは1~5まで固定ですが、注文がある場合のみテーブルに存在します。 tableA uid name 16  山田 17 佐藤 tableB uid itemno itemname 16 1 りんご 16 2 みかん 16 3 もも 16 4 かき 16 5 いちご 17 1 りんご 17 3 もも 17 5 いちご 結果 uid name itemname1 itemname2 itemname3 itemname4 itemname5 16 山田 りんご  みかん  もも   かき   いちご 17 佐藤 りんご  null    もも    null    いちご 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLの書き方

    select A.NO, A.NAME, count(B.TEN) FROM T1 A, T2 B GROUP BY A.NO ORDER BY 3 DESC 結果として以下のようになってほしいのですが、どのようにSQLを書けばよいのでしょうか? 結果 NO | NAME | TEN ---+------+----- 3 + 上村 + 40 1 + 吉田 + 11 2 + 浅野 + 6 T1テーブル NO | NAME ---+-------- 1 + 吉田 2 + 浅野 3 + 上村 T2テーブル NO | TEN ---+-------- 1 + 10 2 + 5 3 + 0 1 + 1 2 + 1 3 + 40