• 締切済み

MySQL4でViewの代わりにできますか?

PostgreSQLで下記のようなビューを作成し、そのビューから日付でgroupbyして日付ごとのユニーク件数を取っていました。 ---------------------------------------------- create view v_uniqcountday as select substring(datetime, 1, 8) as date, uniqid, careercd, count(*) as cnt from accesslog group by date, uniqid, careercd order by date; select date, count(*) as cnt from v_uniqcountday where (date >= xxx) and (date < xxx) group by date; ---------------------------------------------- しかし、MySQLではViewは作成できないようです。 そこでselect文のみで上記のような集計は可能でしょうか? よろしくお願いいたします。

noname#64280
noname#64280
  • MySQL
  • 回答数2
  • ありがとう数6

みんなの回答

回答No.2

MySQL 4.0では、インラインビューも使用できないので、ビューのようにクエリを簡単化したいなら、一時表(create temporary table)を介してといった方法になります。

noname#64280
質問者

お礼

できないということがわかっただけでも助かりました。 ありがとうございました。

回答No.1

>しかし、MySQLではViewは作成できないようです。 MySQL 5.0で、ビューが実装されています。 >MySQL4でViewの代わり MySQL4といっても、4.0と4.1では、機能の大幅拡張や一部の仕様変更があります。 具体的に、バージョンを示してください。

noname#64280
質問者

補足

SELECT 文でも細かいバージョンで変わるんですね。すみません。知りませんでした。 バージョンは 4.0.24 でした。

関連するQ&A

  • BROUP BY で集計し、日付で削除

    よろしくお願いします PostgreSQL 8.0.8です 現在 code date 1    2007-04-02 12:52:22.239818+09 1    2007-03-02 12:52:50.90313+09 2    2007-04-02 13:08:35.093001+09 2    2007-04-02 13:11:08.532232+09 というデータがあるとし これをcodeでグループ化して、codeが何件あるかを調べたいです ただし、dateが本日から30日以上前の場合は省くという条件をつけたいのですがエラーがでてうまくいきません SELECT code,COUNT(code) AS cnt FROM test GROUP BY code HAVING date(date) >= '30前の日付' どう書いたらうまくいくのでしょうか? よろしくお願いします。

  • MySQLで対象期間を決め集計しランキングする方法

    MySQLの初心者ですが、対象期間で集計を行いランキング付けし任意の上位何位までを抽出する方法について教えてください。 全データから集計後上位5位を選ぶ場合・・同順有り select x.`品名`,x.kei,(select count(*)+1 from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) y where x.kei<y.kei ) as rank from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) x having rank <= 5 order by rank といろいろ参考にしてで出来ましたが。任意の対象期間(日付)を設定して実行するSQL文が思いつきません。どこに期間を挿入するのか・・・悪あがきで思い付いた方法として CREATE OR REPLACE VIEW uriage_01 AS SELECT `品名`,SUM(`金額`) AS `金額` FROM uriage WHERE `日付` BETWEEN "2001/01/01" AND "2001/01/31" GROUP BY `品名` で任意期間の集計結果のビューを作りそのビューから select r1.`品名` as `品名`, r1.`金額` as p, count(r2.`金額`)+1 as rank from uriage_01 as r1 left join uriage_01 as r2 on r1.`金額` < r2.`金額` group by r1.`品名` having rank <= 5 order by rank と手間の掛かる方法です。単純に5行だけに限定ならorder by `金額`Limit 5 にすれば良いだけですけど・・・同順があるとどうすれば良いのかと思考停止状態です。尚、当方は、MySQLの勉強を始めたばかりにですので宜しくお願いいたします

    • ベストアンサー
    • MySQL
  • as句に付与された'を"に変換する方法

    素人で申し訳ないのですが知恵を貸してください。 質問追記欄に記載のようなSQL文があったとして、as句に付与されている「'」のみを「"」に変換するプログラムを作りたいと思っています。言語はC言語です。 【SQL例文】 SELECT date as '日付',count as 'カウント' FROM view3; ↓変換後 SELECT date as "日付",count as "カウント" FROM view3; よろしくお願いします。

  • MySQL5で、SUMした値を新たにカラムとして追加したビューを作成し

    MySQL5で、SUMした値を新たにカラムとして追加したビューを作成したいのですが、どういうSQLを書けばよいかわかりません。 今、Aというテーブルがあり、f1,f2,f3というカラムがあります。 このテーブルを元にvwAというビューを作成したいのですが、その際、f1でGroup Byしたf2のSUMをf2Keiというカラム名で追加し、最終的にf3とf2Keiという2つのカラムを持ったビューにしたいです。 create view vwA as select f3,select SUM(f2) as f2Kei from A GROUP BY f1 from A; と書いてみましたがエラーを返されました。 どのようなSQLを書けばよいか、ご教授ください。

  • MySQLの文法について

    MySQL初心者です 以下の文法でおかしなところがあったら直していただきたいのですが… テーブルの内容などは関係なく,文法がおかしいか見ていただきたいです バージョンは6.0.6を使っています select c_count, count(*) as custdist from ( select c_custkey, count(o_orderkey) from customer left outer join orders on c_custkey = o_custkey and o_comment not like '%special%products%' group by c_custkey ) as c_orders (c_custkey, c_count) group by c_count order by custdist desc, c_count desc; よろしくお願いします><

  • mysqlのcountの挙動

    mysqlのcountの挙動について教えてください! tableの内容 id,temp_id,sex,create_date 1,aaa,1,2009-01-01 00:00:00 2,bbb,1,2009-01-02 00:00:00 3,bbb,1,2009-01-02 00:00:00 4,ccc,1,2009-01-03 00:00:00 5,ccc,1,2009-01-03 00:00:00 6,ccc,1,2009-01-03 00:00:00 実現したいことは単純で日付を参照し 2009-01-01であればsex=1は1件 2009-01-02であればsex=1は2件 2009-01-03であればsex=1は3件 と表示させたくforeach内で以下のソースで試したのですがうまく取得 できず任意の日付が2009-01-03であっても結果が1となってしまいます。 ※$val2には任意のY-m-d形式の配列の値が入ります。 $res =& $mdb2->query("SELECT Count(sex) AS cnt FROM table WHERE DATE_FORMAT(create_date, '%Y-%m-%d') = '" . mysql_real_escape_string($val2) . "' && sex = '" . mysql_real_escape_string(1) . "' GROUP BY temp_id"); while ($row = $res->fetchRow()) { $data[$key]['man'] = $row['cnt']; }

    • 締切済み
    • PHP
  • ACCESS Viewでユーザー定義関数を使いたい

    ACCESS2000+MSDEで開発をしていますが、Viewの中でユーザ定義関数を使用したいのですが、できません。 1> create function dbo.count1(@linkNo int) 2> returns int 3> as 4> 5> begin 6> declare @cnt int 7> 8> select @cnt = count(*) from dbo.TBL_OA where [link] = @linkNO 9> 10> return @cnt 11> end 12> go 1> select dbo.count1(100) 2> go ----------- 1 (1 件処理されました) ここまでは上手く行くのですが、 ACCESS側でViewの列へ count1(100)と記述すると 「ADOエラー:'count1'は関数名として認識されません。」 とエラーになってしまいます。 方法は問いませんが、Viewの中でユーザー定義関数が使用できる方法、ご存知の方いらっしゃいましたら、よろしくお願いします。

  • 集計関数の合計について

    お世話になります。 SQLSever2005を使用しています。 Count(*)で月毎のデータ件数を集計し、またその結果を出力するSQLを考えております。 SELECT  (SELECT Count(*) FROM TBL_TEST T1 WHERE T1.T_DATE>='2005/01/01' AND T1.T_DATE=<'2005/01/31') AS CNT_1,  (SELECT Count(*) FROM TBL_TEST T2 WHERE T2.T_DATE>='2005/02/01' AND T2.T_DATE=<'2005/02/31') AS CNT_2,   (SELECT Count(*) FROM TBL_TEST T3 WHERE T3.T_DATE>='2005/03/01' AND T3.T_DATE=<'2005/03/31') AS CNT_3,   (CNT_1+CNT_2+CNT_3) AS TOTAL_CNT ・・・・・・・・・・・・ (★)  FROM TBL_TEST T  WHERE ・・・・・・・・・ 結果(★)のところで『CNT_1は無効です』というエラーになってしまいます。 ちなみにAccessではエラーにならずに結果を出力していました。 上記のSQL文はどのように修正すればよろしいでしょうか?

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • PHPでのMySQLデータ抽出でおかしな現象

    お世話になります。 是非、知恵を貸していただきたく投稿させていただきました。 PHPにてMySQLのデータを持ってくる際におかしな現象がおきております。 登録日(entry_date)をデータ型datetime持つテーブルがあります。 そのテーブルに対し、以下のSQL文を発行し実行したところ、phpmyadminでは正常に動作するのに、PHPではある日付でのみ結果がおかしいという現象が発生しました。 ●正常パターン(2016-01) SELECT COUNT(*) AS cnt FROM テーブル WHERE DATE_FORMAT(entry_date, '%Y-%m')='2016-01'; phpmyadmin上で動作させた結果 cnt --- 155 phpで動作させた結果 Array ( [0] => Array ( [cnt] => 155 ) ) ●異常パターン(2017-01) SELECT COUNT(*) AS cnt FROM テーブル WHERE DATE_FORMAT(entry_date, '%Y-%m')='2017-01'; phpmyadmin上で動作させた結果 cnt --- 19 phpで動作させた結果 Array ( [0] => Array ( [cnt] => 0 ) ) 異常になるのは、何故か日付指定が「2017-01」の場合のみで、他の日付では問題ありません。 「2017」年のほかの日付はまだ存在しないので、そちらは確認できないのですが。 PDOが駄目なのかと思い、PDO以外でも実行してみましたが、結果は変わりませんでした。 ちなみに、SQL文で、DATE_FORMATを利用せずに、 entry_date LIKE '2017-01%' や entry_date between '2017-01-01 00:00:00' and '2017-01-31 23:59:59' なども実行してみたのですが、結果は一緒でした。 検索日付で動作がおかしくなるなんてことがあるのでしょうか・・・ <<環境>> さくらスタンダード mysqlバージョン:5.5 phpバージョン:5.3 もし何か思い当たること等ございましたら、ご教授願いたく思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP