- 締切済み
SQL文のAS句の意味を教えて下さい。
generate_seriesをネットで調べていたら下記のページを見つけ、このページのSQL文を解読していたら一か所、わからないところがあったので質問しました。 下記のSQL文はサイトからコピーしたものです。 SELECT current_date + s.a AS date FROM generate_series( (SELECT 0 - extract(dow FROM current_date))::int, (SELECT 6 - extract(dow FROM current_date))::int ) AS s(a); 下記が上記のSQL文を実行した結果です。 date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQL文のAS句を下記のように私が変更してSQL文を実行したら上記の結果と同じ結果を出力しました。 SELECT current_date + s AS date FROM generate_series( (SELECT 0 - extract(dow FROM current_date))::int, (SELECT 6 - extract(dow FROM current_date))::int ) AS s; 下記が上記のSQL文を実行した結果です。 date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQLのAS句の「s(a)」はどういう意味ですか? ※AS句は別名を付ける際に使うと思うんですが... すみませんが説明していただけませんでしょうか? 宜しくお願いします。
- j-unico
- お礼率38% (26/67)
- PostgreSQL
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- root139
- ベストアンサー率60% (488/809)
ASで列名を付けるのは、SELECT句などで個別の列を指定できるようにするためです。 generate_series では1列しか生成されませんので、あまりメリットは感じませんが、複数の列を持っていて列名の無い仮想テーブルでは重宝します。 例えば、VALUESで仮想テーブルを作った場合、列名を付けておけばSELECT句やWHERE句等で個別の列を簡単に指定することが出来ます。 例) -------------------------------- SELECT a.x, a.y FROM (VALUES('hoge', 100), ('foo', 200), ('bar', 300)) AS a(x, y); ------------------------------------
- nora1962
- ベストアンサー率60% (431/717)
generate_seriesで出来る表データにSという別名をつけ、その列名をaとするという意味です。
関連するQ&A
- アクセスのSQLで1週間の日付を求めたい
アクセスのSQLで1週間の日付を求めたい postgresqlは多少わかるのですが、アクセスのSQLはジェネリックな部分しか知りません。 ネットで探していますが、なかなか良い例がみつかりません。 アクセスのSQLで今日から1週間を7レコードで返す方法を教えてください。 postgresなら以下で行けたと思います。 SELECT * FROM generate_series(CURRENT_DATE,CURRENT_DATE+6,'1 day'); 以上、宜しくお願い致します。
- 締切済み
- その他(データベース)
- as句に付与された'を"に変換する方法
素人で申し訳ないのですが知恵を貸してください。 質問追記欄に記載のようなSQL文があったとして、as句に付与されている「'」のみを「"」に変換するプログラムを作りたいと思っています。言語はC言語です。 【SQL例文】 SELECT date as '日付',count as 'カウント' FROM view3; ↓変換後 SELECT date as "日付",count as "カウント" FROM view3; よろしくお願いします。
- ベストアンサー
- C・C++・C#
- SQL CASE 文について
開発環境 SQLSERVER VB2005 SQLのCASE文についての質問ですが、DATE型のデータが有効値の場合は”スペース”それ以外の場合は格納されているDATE型を表示したいのですが、どなたかご教授お願いいたします。下記のSQLでは全ての日付が出てしまいます。 SELECT CASE 日付 WHEN '2000/01/01' THEN ' ' ELSE 日付 END AS Expr1 FROM テーブル CASE文以外でもできますか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- PostgresのSQL文
誕生日を取得するSQLとして以下の文を発行し、 -- 誕生日の並び替え(多い順) select trunc((current_date - to_date(birth,'YYYY/MM/DD'))/365) as age, count(*) as cnt from tb_custom_user where birth is not null group by age order by cnt desc; 次の結果を得ました。 age | cnt -----+----- 25 | 2 26 | 1 28 | 1 (3 rows) cntが最大数のときのageだけを取得したい場合、 上記のSQLをどう変更すればいいのでしょうか?
- ベストアンサー
- PostgreSQL
- SQL文の書き方
お世話になっております。 現在、SQLServer2000(SP4)を使用しています。 次の結果を求めるSQL文を作りたいのですが、中々上手く行きません。 良い方法を教えて下さい。 あるテーブル(tableA)にレコードが以下のようにあるとします。 【基本コード】【大分類】【中分類】 1 1 3 1 1 4 1 2 1 2 1 99 2 18 1 3 3 2 やりたい事は、【基本コード】毎に、【大分類】【中分類】の最小値を取得したいので、下記の結果を得たいのですが、 期待する結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 99 3 3 2 現在考えているSQL文では、下記のようになってしまいます。 実際の結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 3 3 3 3 現在考えているSQL文↓ SELECT 基本コード, MIN(大分類) AS 大分類, (SELECT MIN(中分類) FROM tableA WHERE 大分類 = (SELECT MIN(大分類) FROM tableA) GROUP BY 大分類) AS 中分類 FROM tableA GROUP BY 基本コード 中分類を求める場合の、大分類の指定の仕方が悪いのはわかるのですが、どう直したら良いのか分からず困っています。 宜しくお願いします。
- ベストアンサー
- SQL Server
- select文について
現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL文で質問があります。
商品マスタがあり、データは下記の感じで登録されています。 コード | 商品名 | 商品カナ | 分類コード ・・・ --------------------------------------------------------- 0001 | マウス | マウス | 01 ・・・ 0002 | キーボード| キーボード| 01 ・・・ 0003 | モニター | モニター | 01 ・・・ ・ ・ ・ SQL文で質問があります。 下記のSQLでは取得できるんですが・・・ SELECT * FROM M_SHOHIN WHERE code = ANY('{0001,0002,0003}'); 下記のSQLを実行したらエラーが出力されました。 SELECT * FROM M_SHOHIN WHERE code = ANY( SELECT ARRAY_AGG(code) AS code FROM M_SHOHIN WHERE class_code = '01' ); ERROR: operator does not exist: character varying = character varying[] HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. なので下記のようにCASTをするようにして実行したらエラーは出力されなくなりましたがデータの取得ができませんでした。 SELECT * FROM M_SHOHIN WHERE code = ANY( SELECT CAST(ARRAY_AGG(code) AS VARCHAR) AS code FROM M_SHOHIN WHERE class_code = '01' ); どのようにすれば取得できますでしょうか。 説明が下手で申し訳ありませんがアドバイスいただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。
- ベストアンサー
- PostgreSQL
- SQL文の最後に「;」はいらないのでしょうか?
VBAのADOについて質問です。 SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub test_Click() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM Tテーブル" ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ でも問題なくコードが動きました。 SQL文の最後に「;」はいらないのでしょうか? ちなみに SQL = "SELECT * FROM Tテーブル;" でもエラーになりませんでした。
- 締切済み
- Visual Basic
- このSQL文の意味を教えてください。
SQL勉強中の者です。このSQL文の意味を教えてください。 SELECT A.* FROM table AS A, table AS B WHERE A.id *= B.id AND A.flag = 1 tableにAとBという別名をつけて、Aの全ての項目を抽出しているというところまでは分かりました。 分からないのは「WHERE A.id *= B.id」の部分です。ただの「=」なら分かりますが「*=」って何ですか? あと、AとBのテーブルが同じなのですが、同じテーブルを2つ並べている意味がよく分かりません。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 【再】2)-SQL文の書き方を教えてください。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=694458 先日この問題で投稿しましたが、未完成のため、再度要望を整理し、ご指導をお願いいたします。 W←tabel名:名称、日付、数量 明細データ: 名称 日付 数量 A 2003/10/01 200 B 2003/10/03 500 C 2003/10/10 4000 A 2003/10/03 200 A 2003/10/03 100 C 2003/10/15 100 B 2003/10/15 300 C 2003/10/15 50 B 2003/10/15 60 求めているクエリーのイメージ: 2003/10/15 時点 ================================================ 名称 当日数量 当月数量 A 0 300 B 360 860 C 150 4150 ------------------------------------------------- 先日教えてもらったSQL文、希望のクエリーを作れないです。 -------------------------------------------------- select 名称, sum(AAA) as 当日数量, sum(BBB) as 当月数量 from ( select 名称, 0 as AAA, sum(数量) as BBB from W where 日付 >= #2003/10/01# and 日付 <= #2003/10/15# group by 名称 union select 名称, sum(数量) as AAA, 0 as BBB from W where 日付 = #2003/10/15# group by 名称 ) group by 名称; このSQL文は、2番目のSelectのところでエラーが出る (From句の構文エラーです) -------------------------------------------------- 後、Accessバージョンによって、SQL文が変わるでしょうか?当方は、Access97を使っている。 ご指導をお願いいたします。
- ベストアンサー
- Visual Basic
補足
回答ありがとうございます。 SELECT文の個所を「s.a」のみでSQL文を実行して出力結果を見たら列名が「a」になっていました。 理解できましたが通常のAS句で別名を付ける場合と表データの別名+列名を付ける場合では何かメリットがあるのでしょうか。 ネットで調べてもヒットする事ができませんでした。 ※私の調べ方が悪いと思うんですが... このような技術などを調べ方も教えていただけませんでしょうか。 もう少し私にお付き合い下さい。 宜しくお願いします。