• 締切済み

mysql

Accountテーブルに登録されている人数 count(*) --------- 4 ARTICLEテーブルに登録されている投稿数 count(*) ------------ 4 ARICLEテーブルのIDの合計値 sUm(ARTICLE_ID) -------------------- 10 ARICLEテーブルのIDの平均値 AVG(ARTICLE_ID) ------------------------- 2.5000 COLOR_MASTERのテーブルに登録されている色の数 counut(*) --------------- 5 お願いします。

noname#213633
noname#213633
  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • kichikuma
  • ベストアンサー率18% (202/1080)
回答No.1

何をお願いしているのか意味がわからない。

関連するQ&A

  • Mysql サブクエリの使い方

    table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 「> avg = (double)sum/10;

    「> avg = (double)sum/10; この時点では、sumには「今まで入力した人数分の合計」が入っています。 10人になるのは最後の1回だけです。それ以外は10で割っても平均にはなりません。 また、それまでの人数(=i+1)で割っても、「それまでの人数分の平均」であって「10人分の平均」ではありません。」と書いてありますが、for文では10人分の平均点ではないのですか?そうでないのなら、ループ分の}から10人分の平均値を出したらいいのですか? あとそれと > if(avg<=count) > count++; 「avgは「平均値」、countは「平均値以上の人の人数」ですよね? この2つを比較する意味ってありますか? また、上に書いたように、このループでは「全員の平均点」は計算できないのですから、「平均点以上かどうか」なんて判定できませんよね。」とはどういう意味ですか?

    • ベストアンサー
    • Java
  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • MySQLの抽出について

    MySQLの抽出時間を短縮できないため困っております productテーブル product_id,test_id 86009,'10701,8545' 84334,'12610,9505,13326,9024,1020747,6787,3737,5266' 85078,'1001182,1002129,1003064' 84082,'24723,23417,1002357,1000683,1002258,1003501,25426' 85072,'1008167,1007194,1006309,5240,1009347,30212' 85071,'28079,1007881,1000733,1002367,27836,25141,29863' 86014,'23988,17802,26440,1005928,22668,28372,28135' 83762,'1010127,1010436,1011554,1013949,1014307' test_masterテーブル id,initial_kana 10701,'あ' 21122,'あ' 1002129,'あ' 1002357,'い' 2291,'い' 29863,'い' 23988,'う' 1010436,'え' 22299,'え' 上記の2つのテーブルがあります。 内容は下記のようになります。 productテーブルの product_id:一意のID test_id:test_masterテーブルの一意のID(test_master.id)のカンマ区切りで接続した文字列 実際のレコード数:86,688件 test_masterテーブルの id:一意のID initial_kana:全角一文字のみ 実際のレコード数:14,602件 【やりたいこと】 (1)test_masterテーブルのtest_master.initial_kanaカラムに対応する文字(例えば'あ')に対応するtest_master.idを取得する (2)(1)で取得したtest_master.id群を元に、productテーブルのtest_idに    該当する(product.test_id文字列の中にtest_master.idが入っているもの)もののproduct.product_idを取得する ということをしたいのです。 (3)例えば、test_master.initial_kana='あ'を取得したい場合、productテーブルのproduct.product_id=86009,85078が取得される 私の作ったSQLは下記のものになります limitとoffsetに関しては、都合上消すことはできません。 ・test_masterテーブルから、test_master.initial_kana='あ'のものを抽出 ・productテーブルから、product.test_idがNULLでないものを抽出 ・上記二つから、FIND_IN_SETで、test_master.idに該当するproduct.test_idの文字列の中から抽出 --------------------------------------------------------- select p.product_id as product_id, am.id as id from ( select id from test_master where initial_kana = 'あ' ) as am, ( select product_id,test_id from product where test_id is not null ) p WHERE ( FIND_IN_SET(am.id, p.test_id)!=0 ) group by am.id limit 20 offset 0 --------------------------------------------------------- このSQLを実行すると件数が多いためか 30秒ほど掛かってしまい実用に耐えられない状況です。 すみませんが、SQLに詳しい方がいらっしゃいましたら ご教授をお願いできますでしょうか。 検索が5秒くらいまで短縮できれば万々歳なのですが… よろしくお願いいたします

  • MySQL 最大値のレコードの特定

    SQLが上手く作れないためお知恵をお貸し頂ければ幸いです。 articleテーブルに存在するユーザの一覧に、記事の投稿件数、記事に含まれるsizeの最大値、最大値が投稿された記事の登録日時、記事のタイトルを加えたものを抽出したいです。 [ article ] article_id user_id size insert_unixtime title ---------------------------------------------------------- 1 100 18 20130101 aaaaaaaaaaaa 2 100 10 20130102 bbbbbbbbbbbb 3 100 18 20130103 cccccccccccc 4 200 11 20130201 dddddddddddd ↓↓希望する抽出結果↓↓ article_id user_id count max_size insert_unixtime title ---------------------------------------------------------- 3 100 3 18 20130103 cccccccccccc 4 200 1 11 20130201 dddddddddddd 自己結合等で、ユーザ毎の最大sizeを抽出してそれに該当するレコードを探すことであるていどはできたのですが 最大sizeが複数あった場合に、両方のレコードを取得してしまいます。(上記の例では、article_id 1と3を抽出してしまう。 ※最大sizeが複数会った場合はinsert_unixtimeが大きい方のタイトルを表示したい。 うまく1SQLで抽出できないでしょうか。

  • プログラミングが分かりません。

    プログラミングが分かりません。 プログラミングの授業ではなくデータベースデザインの授業をとっていますがプログラミングに関係していると思いこのカテゴリーで質問させてもらいます。 具体的なC言語を使ってプログラミングはしてませんが構造化プログラムについて授業内で勉強しています。そこでこんな問題が出てきました。 一人のユーザーから適当な数を1つずつ与えられて最後に平均を出す(例えば、5,8,2,3,1,1 と数を一つずつ言ってその時の平均の値を求める) BEGIN SUM = COUNT = 0 DOWHILE There are more numbers in the set ACCEPT NUM FROM USER     SUM = SUM + NUM COUNT = COUNT + 1 ENDDO AVG = SUM/COUNT PRODUCE AVG TO USER END コレをヒントに一つ宿題が出されました。       Aさん 6 8 4 Bさん 9 7 6 Cさん 8 8 5 というように一人三種類の数字がありそれぞれA、B、Cさんの合計を出して一番数字が多い人を決める この場合Bさん(合計22) 最初に示したヒントから考えてどのようにすればBさんを答えとして導くことができますでしょうか? 最初に示した感じでどなたか教えていただけますか?よろしくお願いします。具体的なC言語も指定しないと説明しづらいと思いますのでそのときはこのカテゴリーで質問させてもらった通りにVisual Basic で答えて下さってもかまいません。 自分で考えたのも載せますがやっぱり途中で分からなくなってしまいました。 COUNT = 0, MAX = 0, SUM = 0 DOWHILE there are more people DOWHILE there are more numbers in the set  ACCEPT NUM FROM USER  SUM = SUM + NUM  COUNT = COUNT + 1

  • MySQLにてCOUNTした値を更にCOUNT

    MySQLにてCOUNTした値を、更にCOUNTする事を1回のSQLにて実行する事は可能でしょうか? ※2回のSQL、プログラミングを介する、EXCELで再集計する等でならCOUNTのCOUNTは求められるのですが…1回のSQLでの回答お願いします。 ユーザーIDと課金額のカラムからなる、以下のようなテーブルがあるとします。 buyテーブル user_id,coin 1,100 5,100 10,200 5,200 5,200 17,100 1,100 2,200 23,500 ユーザー毎の課金回数は下記にて求められますが、 SELECT user_id,COUNT(coin) FROM buy GROUP BY id user_id,count(coin) 1,2 2,1 5,3 10,1 17,1 23,1 count(coin)毎の人数というのはどのように求めればいいでしょうか? いわば下記のような集計結果が理想です。 ※このような結果を1回のSQLにて出力するSQLをズバリ今回の例に沿って知りたいです。 count(coin),count(count(coin)) 1,4 2,1 3,1 ■環境 Apache2 MySQL5 PHP5 ご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • キーボードから10人分の点数を格納する配列を用意し、平均点および平均点

    キーボードから10人分の点数を格納する配列を用意し、平均点および平均点以上の人数と番号を表示するプログラムで、下記のプログラムを作成してみたんですけど、平均点以上の人数と番号がうまく表示されません。if文でも人数は0になるし、番号は1~10番まで表示されるし、なぜでしょうか? import java.io.*; class Hairetu2 { public static void main(String args[]) throws IOException { System.out.println("10人分の点数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int s[]=new int[10]; int i; int sum=0,count=0; double avg=0; for(i=0; i<s.length; i++){ System.out.print((i+1)+"番は?"); String str = br.readLine(); int a = Integer.parseInt(str); s[i]=a; sum+=a; avg = (double)sum/10; if(avg<=count) count++; } System.out.println("平均点は"+avg); System.out.println("平均点以上の人は"+count+"人"); for(i=0; i<s.length; i++){ if(i>=avg) i++; System.out.print((i+1)+"番\t"); } } }

    • ベストアンサー
    • Java
  • 人気記事(ランキング)表示に関するDB設計や方法

    DBのテーブル設計と実装について教えて頂けると嬉しいです。 登録制サイトで、記事を投稿して閲覧者がお気に入りに登録できるような仕組みを作っています。 トップページ等で「人気の記事」を表示する際、お気に入り登録数が多いものを表示させたいと思っています。 このような場合、どのようなテーブル設計や方法を取るのが良いのでしょうか? 3つ方法を思いつきますが、どれも一長一短なのかなという気がしています。 (テーブル設計の例)  「posts」テーブル  : post_id, user_id, text  「favorites」テーブル: favorites_id, user_id, post_id  「users」テーブル  : user_id, user_name (方法1)お気に入り登録数をテーブルに持たない(都度カウント処理する) トップページ表示の都度、「favorites」各記事のお気に入り登録数をカウントして(post_id で group byしてcountする)、登録の多い記事を表示させます。シンプルな方法ですが、レコード数が多い場合の負荷を心配しています。 (方法2)お気に入り登録数をテーブルに持つ お気に入り登録数を「posts」テーブル内に保持させます。  「posts」テーブル  : post_id, user_id, text, favorite_count 閲覧者がお気に入り登録した場合は「favorites」テーブルへの追加を行うと供に「posts」テーブルの「favorite_count」を更新します。トップページ表示の際は「posts」テーブルの「favorites_count」を見に行って多いものを表示させるだけなので負荷の心配は減ります。しかし、冗長な?データをテーブルに持つのは何か嫌な気がしますし、またプログラム実装が少し困難になります。 (方法3)人気の記事テーブルを別に持つ バッチ処理を1日1回等走らせ、登録数の多い記事をサーチして「人気の記事」テーブルに格納します。トップページでは、この「人気の記事」テーブルを見に行って表示させるだけになりますので負荷が減ります。しかし、リアルタイムな情報を表示できないのが残念です。 環境は、MySQL5.1、PHP5.2.17 となります。 アドバイス等頂けましたら嬉しいです。

  • 【MySQL】1対1でテーブルをあえて分ける

    mysqlを使用してデータベースを作成しているのですが データベースでテーブルを分けるときって 【アカウントテーブル】 ID アカウント 名 アカウント パスワード 名前 住所 電話番号 職業 【職業テーブル】 職業ID 職業名 というような1対多というのはよく組むとおもうんですが 下記のような 【アカウント情報テーブル(アカウント情報)】 アカウントID アカウント 名 アカウント パスワード 【アカウント情報テーブル(プロフィール情報)】 アカウントID 名前 住所 電話番号 職業 1対1の関係でテーブルをジャンル(エンティティ)ごとに複数にわけて あとでリレーションして一個にまとめるというのはデータベース的にあまりよろしくないのでしょうか? 何故、こんなことしたいかというと、1テーブルあたりのカラム数がかなり多くなってくると PHPでデータベースを書き込んだり呼び出したりする時に毎度多くのカラムを取り扱わなければならず SELECTで、カラムを一個一個選んで行かないといけません。 しかし、取り扱いたいカラムは大抵の場合あるジャンルだけなので リレーションするかしないかで、あるジャンルのデータだけを取り扱えれば 効率がよくなるのでは? というのがあります。 また、視覚的にカラムの把握もしやすくなります。 この1対1テーブルは、DB設計的にどうなでしょうか?

    • ベストアンサー
    • MySQL