• ベストアンサー
  • 暇なときにでも

SQLのエイリアス

select 1000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE1, 2000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE2, 3000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE3 from table1 といったようなSQL文があったとします。 ○ - sum(縦 * 横 * 高さ * table1.個数 * 10)の中の、 sum(縦 * 横 * 高さ * table1.個数 * 10)は共通です。 この部分を共通化させる方法はあるのでしょうか? 例えばイメージとして、 string X = "sum(縦 * 横 * 高さ * table1.個数 * 10)" 1000 - X とやれば見やすいです。 SQLで上記のような方法が使えないのはわかるのですが、何か上手なやり方はあるでしょうか? 環境はMYSQL5.5 Win 7です。

共感・応援の気持ちを伝えよう!

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

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

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

>VIEWを最終的に作ろう では、viewを2つ作っては? create view v1 as select sum(縦 * 横 * 高さ * table1.個数 * 10) as SIZE0 from table1; create view v2 as select 1000 - SIZE0 As SIZE1,2000 - SIZE0 As SIZE2,3000 - SIZE0 As SIZE3 from v1; select * from v2; そもそもviewをつくるなら多少冗長な書き方をしても良いような気がしますが・・・

共感・感謝の気持ちを伝えよう!

質問者からのお礼

なるほど、そういったやり方もあるのですね!勉強になりました。ありがとうございます!

その他の回答 (1)

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

こんな感じですかね? select 1000 - SIZE0 As SIZE1, 2000 - SIZE0 As SIZE2, 3000 - SIZE0 As SIZE3 from ( select sum(縦 * 横 * 高さ * table1.個数 * 10) as SIZE0 from table1 )

共感・感謝の気持ちを伝えよう!

質問者からのお礼

おぉ!こんな手法があるとは。さっそく試してみたいと思います。ありがとうございます。ただ1点問題があるのはVIEWを最終的に作ろうと思っています。MYSQLだとFROM句でサブクエリができないという仕様なので、from句でサブクエリを使わないで実現する方法はありますでしょうか?

関連するQ&A

  • アクセス:クロス集計の抽出条件

    添付のようなテーブルがあり下記のSQLを実行するとクエリ1になるのですが、合計数に抽出条件を入れてクエリ2のように10個以下のものは表示しないようしたいと思います。 下記SQLをどのように直したらよいでしょうか。一つのクエリで行う方法を教えて下さい。 TRANSFORM Sum([テーブル1].個数) AS 個数の合計 SELECT [テーブル1].[くだもの], Sum([テーブル1].個数) AS 合計 FROM テーブル1 GROUP BY [テーブル1].[くだもの] PIVOT [テーブル1].月;

  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • ExcelにSQLの結果を表示

    ExcelVBAにてSQLで取得した値を貼り付けたいのですが どのようにコードを記入すればいいんでしょうか? ネットで調べたら下記のような参考コードを見つけたのですが dim SQL as String dim rs As Recordset SQL = " SELECT SUM(フィールド名) AS 名前 FROM テーブル名 " Set rs = CurrentDb.OpenRecordset(SQL) この後 RANGE("A1")=rs としても種々のエラーが出ます? どうしたらよいでしょうか? よろしくお願いします

  • SQL文で作ったデータを使ったUPDATE

    環境はMySQL5.6です。 下記のテーブルccがあります。 【cc】 shisan  user 500  tanaka 1000  mikami 400   tanaka 1300  mikami SELECT Total, user FROM (SELECT SUM( cc.shisan ) AS Total, user FROM cc GROUP BY user) AS t1 とすることによりSQL上にt1テーブルを作ることが出来ます。 【t1】 Total  user 900  tanaka 2300  mikami 次に、このt1テーブルのTotalの数値を下記のmoney_tableにあるcash欄に挿入(UPDATE)したいと考えています。 【money_table】 cash  user 0   tanaka 0   mikami そこで下記のSQL文を作ったのですがエラーになります。 UPDATE money_table,cc SET money_table.cash=t1.Total FROM (SELECT Total, user FROM (SELECT SUM( cc.shisan ) AS Total, user FROM cc GROUP BY user) AS t1) WHERE money_table.user=t1.user どこがいけないのかご指導いただけませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQLの文法でわからないことがあります

    SQLで名前の属性に「様」をつけて取り出したい場合はどうしたらいいのですか。 参考書に書いてあるようにやったのですが、そうすると0が出力されてしまいました。(もとのテーブルにはちゃんと名前が入っています) よろしくお願いします。 mysql> select customername || '様' as お名前 from customers; +--------+ | お名前 | +--------+ | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 |

    • ベストアンサー
    • MySQL
  • SQL Injection対策はこれで十分?

    データベースにMySQLを使用しています。SQL Injection対策を行いたいのですが、以下の方法で十分防ぐことができるのでしょうか? <?php $hoge = $_GET['ok']; $sql = "select * from ok where user = '".mysql_real_escape_string($hoge)."';"; $res = mysql_query($sql ....... ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 引き算のSQL

    このSQLどこがおかしいのでしょうか? -------- SELECT uid, SUM( `in` ) AS `in合計` , SUM( `out` ) AS `out合計` , ( `in合計` - `out合計` ) AS `残高` FROM `points` GROUP BY uid HAVING uid =1 -------- Unknown column 'in合計' in 'field list' もちろん、テーブルには'in合計'なる列名は無いのですが、as ~ ではダメ? 検索対象はuid=1 この人の、inポイントを合計する。 outポイントを合計する。 inポイント合計 - outポイント合計 = 残高ポイント を求める。 ということをしたいのですが、どこが間違っているのでしょうか? DB: MySQL

  • SQLのcount()とgroup by

    以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。