MySQL 4.0を使用してname単位でpriceの合計を一覧表示する方法とは?

このQ&Aのポイント
  • MySQL 4.0を使用して、name単位でpriceの合計を一覧表示するには、GROUP BY句を使用します。
  • 以下のようなSQL文を使用することで、nameとpriceの合計を一覧表示できます。 SELECT name, SUM(price) FROM テーブル名 GROUP BY name;
  • priceの範囲を指定する場合、WHERE句を使用します。 例えば、priceが3000以上のデータのみ表示したい場合、以下のようなSQL文を使用します。 SELECT name, SUM(price) FROM テーブル名 WHERE price >= 3000 GROUP BY name;
回答を見る
  • ベストアンサー

ID単位で合計する

お世話になっております。ご指導いただきたく投函させていただきます。  no id name date price -------------------------------  1  4 大城 11-01 2000  2  1 田中 11-02 -800  3  8 小林 11-03 3000  4  2 安藤 11-04 2000  5  4 大城 11-05 -500  6  2 安藤 11-05 1000 と、以上のようなテーブル(MySQL 4.0)がありまして、 以下のように、name単位でpriceの合計を一覧表示させるには、どのようなSQLとなるのでしょうか? 4 大城 3500 8 小林 3000 2 安藤 3000 1 田中 -800 また、このpriceの範囲(~以上や、~まで)を指定する場合なども教えていただけると幸いです。 groupで処理するのかな?とは思いつつ、調べているのですが、なかなか欲している情報が得られず困っております。 これも知識が乏しいが故のことですが、アドバイスいただけると幸いです。 お忙しい中恐縮ですが、宜しくお願い致します。

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>4 大城 3500 id=4は1500じゃないの? SELECT id,name,SUM(price) as sumprice FROM テーブル GROUP BY id のような感じで。 priceの範囲というのは、たとえば1000円以上を合計するとか? それならWHERE price>=1000とか、普通に・・・ もし結果が1000円以上なら・・・みたいなら HAVINGをつかう。 >これも知識が乏しい SQLの初歩の話なので、いやみ抜きで基本から勉強した方がよいですよ

mayu_chap
質問者

お礼

yambejpさんへ こんばんは。お世話になっております。 ご親切にソースまでご提示頂き、ありがとう御座います。 無事、願っていた結果を得ることが出来ました。 >SQLの初歩の話なので、いやみ抜きで基本から勉強した方がよいですよ 全くです;; 合計した金額はどのような形のWEHER句になるのか判らなかったもので伺ったのですが、考え方は一緒なのですね。 兎にも角にも、早速のアドバイスをありがとう御座いました。

関連するQ&A

  • PHPでMySQL内のデータの合計値を算出

    お世話になっております。 PHPからMySQL5を呼出すスクリプトを制作しています。 no id   date   price ---------------------------- 1  4  2013-4-29  2100 2  2  2013-5-1   3150 3  2  2013-5-31  4200 4  7  2013-6-1   2100 5  2  2013-6-2   1575 6  4  2013-6-2   8400 というようなデータがありますが、下記のように、2番のid、かつ現在から1ヵ月前の期間内のpriceの合計額を算出したいのですが、 SQLおよび変数はどのようなものになりますでしょうか? id: 2  total: 5775 ネットで調べながらSQL文などを色々と試していますが、PHPの変数をどのようにしていしたらいいのかが分からず、結果を返すことが出来ずに立ち止まっている状況です。 大変お恥ずかしい質問と認識しているところですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 重複したフィールドに関して

    こんばんは。お世話になっております。 PHPにてMySQLを用いて掲示板のようなものを作成しているのですが、初心者なりの考えで、新規投函のときに、あるフィールドにUNIXタイムスタンプを登録し、返信に関しては初回投函した際のタイムスタンプを登録する事により、スレッドを分別しようと考えております。 出来上がりのイメージとしては、この「教えて!goo」のように、初回投函したタイトルを一覧表示し、その先にその件に関する回答が表示させたいと思います。 先にも述べたように、初心者なりの考えで、新規投函・回答・返信、すべて新規レコードを追加という流れで、タイムスタンプによる同一の数値により、新規投函か否か、と分別できれば・・と考えておりました。 しかし、初心者故にか、普段用いている下記コードでは、全てのレコードが対象となってしまい、同一の数値(タイムスタンプ)による分別(初回投函のみを検索結果として表示させたい)が出来ない事に気付きました。 フィールドの考え方も含めて、ご教授いただけたら幸いです。お忙しい中恐縮ですが宜しくお願い致します。 mysql_connect('localhost','root','*****'); mysql_select_db('test'); $sql= "select * from member_bbs where id = '$id'; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows <> 0){ while($row = mysql_fetch_array($result)){    ・    ・    ・ MYSQL(カテゴリー)での質問かとも思いましたが・・・宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テーブル結合方法について

    MySQL5.1で、Table a ,Table b から、Table cのように取り出したいのですが、 SQLでSELECTする方法がわかりません。 Table b優先だけど、Table aにしかデータがない場合もあるといった感じです。 Table a No  Name 1 加藤 2 佐藤 3 田中 Table b No Name 2 佐藤先輩 4 田辺先輩 Table c No Name 1 加藤 2 佐藤先輩 3 田中 4 田辺先輩 どうか、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • getがらphpに日本語を送ったとき化け文字に

    <?php ・・・・・・・・ $mousikomi_hi1 = $_GET["mousikomi_hi1"]; $name =$_GET["name"];// "田中"; $sql = "SELECT $mise.kokyaku_no FROM $mise WHERE name='$name' AND DATE_FORMAT(mousikomi_hi1,'%Y/%m/%d') ='$mousikomi_hi1'"; mysql_query("set names utf8"); $rows = mysql_query($sql, $sv) or die("mysql query Error"); $row = mysql_fetch_array($rows, MYSQL_ASSOC); ・・・・・・・・・ ?> var mousikomi_hi1 = $F("mousikomi_hi1"); var name = document.addE.name4.value; //alert(name); xhrObj.open("get", "add_meigara.php?hannbaitenn="+hannbaitenn+"&mousikomi_hi1="+mousikomi_hi1+"&name="+name); getがらphpに日本語を送ったとき $name =$_GET["name"] に化け文字?(□/□□)になり SQLの検索ができません 直接 $name = "田中";とすると 検索できます 初心者で、あまりわかりませんが、よろしくお願いします。

    • 締切済み
    • PHP
  • mysqlからphpで値を取得する

    こんにちは、php初心者のBlackwinglsです。 mysql上に住所録があります。 mysql> select count(*) from jyusyo where seibetu = 'man' and name = 'tanaka'; とやると男性の田中さんは、6名と表示されます。 これをphpでやりたいのですが、 $sql ="select count(*) from jyusyo where seibetu = 'man' and name = 'tanaka'"; $result = mysql_query($sql,$con); ここから先の記述がよく分かりません。 mysql_fetch_array や mysql_result 等を試してみたんですが、基本的な事が分かってないので当然上手く動いてくれません(^^;) どなたかアドバイスを頂けたら幸いです。 環境 apache 1.3.26 mysql 3.23.49 php 4.1.2 ps php初心者にお勧めのWebPageありましたらあわせて紹介ください。

    • ベストアンサー
    • PHP
  • 前のidをコピーするSQL文

    MySQLを使って管理画面を作っております。 $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; という文で使ったidをコピーしてから次のINSERTの文でそのidの番号を使って別テーブルのカラムにその番号をINSERTするしくみを作りたいのですがなかなか上手くいきません。 var_dump($last_id);では番号がコピーされているのですが、INSERTができません。 いつもお世話になってしまい大変恐縮なのですが、どなたかご教授いただけないでしょうか?よろしくお願い致します。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="../../xxxxx/team.css"/> <title>選手追加完了</title> </head> <body> <div id="main"> <?php $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_position_id=$_POST['position_id']; $pro_team=$_POST['team_name']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $pro_position_id=htmlspecialchars($pro_position_id); $pro_team=htmlspecialchars($pro_team); $dns = "mysql:host=localhost; dbname=player;charset=utf8"; $dns_id = "xxxxx"; $dns_pw = "xxxxxxx"; try { $conn = new PDO($dns, $dns_id, $dns_pw, array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (Exception $e) { echo 'ERROR: ' . $e->getMessage(); die(); } try { //トランザクションを開始する。オートコミットがオフになる $conn->beginTransaction(); //処理その(1) $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; $stmt=$conn->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[]=$pro_position_id; $stmt->execute($data); //直近id取得 $last_id_sql = "SELECT LAST_INSERT_ID() as id"; $stmt = $conn->prepare($last_id_sql); $stmt->execute(); $last_id = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); //確認var_dump($last_id); //処理その(2) $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql2='INSERT INTO team(team_id,team_name) VALUES(?,?)'; $stmt=$conn->prepare($sql2); $data2[]=$pro_team; $data2[]=$last_id; $stmt->execute(array($last_id,$pro_team)); $stmt->closeCursor(); //確認var_dump($last_id); //変更をコミットする $conn->commit(); } catch(PDOException $e){ //変更をロールバックする $conn->rollBack(); echo 'ERROR:' . $e->getMessage(); } // 切断 $conn = null; print $pro_name; print'を追加しました。<br />'; ?> <a href="xxxxx">戻る</a> </div><!--main--> </body> </html>

    • ベストアンサー
    • MySQL
  • 登録データの繰り返し削除

    こんばんは。お世話になっております。 DBを利用し掲示板を作っているのですが、初回に投函されたものだけを検索結果として表示させ、チェックボックスにて削除できるよう、以下のようなスクリプトを記述してみたのですが、value値をauto_incrementであるidだと、初回投函のみのデータだけが削除され、投函の返信は残ったままとなってしまいます。 // データベース接続   ・   ・ // 削除データ取得 if (@$_POST["c1"]) { $c1 = $_POST["c1"]; $sql = "DELETE FROM table1 WHERE (id IN ("; for ($i = 0; $i < count($c1); $i++) { $sql .= intval($c1[$i]); if ($i < count($c1) - 1) { $sql .= ", "; } else { $sql .= "))"; } } mysql_query($sql, $conn) or die("エラー"); } //テーブル接続   ・   ・ while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">"; echo "<br>"; echo "<input type=\"checkbox\" name=\"c1[]\" value=\"".$row["id"]."\">";   ・   ・  以下省略 以上のままだと初回投函のみの削除となるため、一回の動作で返信も削除したいために、投函に属する値(id_keyとして同じ値を設定済み)にしたいと考えているのですが、for文中におけるコード設定が分からず、アドバイスをいただければと投函させて頂きました。 ループ条件の設定によるものなのでしょうが、その条件を設定するためのコードまで浮かんで来ません。 何処をどう説明したら良いのか分からず、分かりにくい説明になっておりますが、ヒントなどいただければ幸いに思っております。お忙しい中恐縮ですが宜しくお願い致します。

    • 締切済み
    • PHP
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP
  • 思ってもいない結果に困っています

    お世話になっております。 データベース名:payment_daibiki(MySQL 5.1) daibiki_no postage_price_min postage_price_max daibiki_price 1       0        9999        315 2      10000       29999        420 3      30000       99999        630 4      100000      300000        1050 という内容のテーブルがあります。 これは商品を発送する際の代引手数料が格納されているのですが、 postage_price_minと、postage_price_maxを参照して、この範囲内の手数料を 抽出するというものです。 例えば、発送する商品の代金が、2240円の場合、 postage_price_minより多きく、postage_price_maxより小さいものを参照するので、 求める手数料は315を返したいと考えています。 そこで質問なのですが、 SELECT * FROM payment_daibiki WHERE postage_price_min <= '2240' AND postage_price_max >= '2240' とSQLを実行させると、該当するデータはないと返されてしまいます。 初歩的な質問ですが、どこに誤りがあるのでしょうか? また、一番小さな手数料を求めるため、 SELECT * FROM payment_daibiki ORDER BY daibiki_price DESC LIMIT 1 と実行させると、630が返ってきてしまいます。 初歩的な事とは重々承知していますが、色々と設定を変えても返ってくるデータが どれも予想を反するもので、どこに誤りがあるのか分からなくなってきました。 以上ですが、このような状況、どういったことが考えられるのでしょうか? お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL