TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
【9i】オラクルマスターGOLDのスレ【10g】
【論理ファイル】AS400DB【キューリー】
MySQL 総合 Part24
ADO DAO など接続方法について
【PostgreSQL CE認定試験】ってどう?
【オンメモリ%メモリデータベース【インメモリ】
MongoDB 1
Firebird関連スレ3
自治スレ@DB板 2
【M言語】キャシエ・CACHE【MUMPS】

SQL質疑応答スレ 15問目


1 :
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。
SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。
質問するときはDBMS名を必ず付記してください。
【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明
前スレ:
SQL質疑応答スレ 14問目
http://peace.2ch.sc/test/read.cgi/db/1371476534/

2 :
SQL言語リファレンス一覧
Oracle Database
http://docs.oracle.com/cd/E49329_01/server.121/b71278/toc.htm
Microsoft SQL Server
http://msdn.microsoft.com/ja-jp/library/bb510741
IBM DB2 Database
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/c0004100.html
PostgreSQL
http://www.postgresql.jp/document/current/html/sql.html
MySQL
http://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html
http://dev.mysql.com/doc/refman/5.1/ja/sql-syntax.html

参考リンク
http://sql.main.jp/cont/sql/map.html
http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html
http://www.geocities.jp/oraclesqlpuzzle/
http://www.techscore.com/tech/sql/

3 :
過去スレ
14問目:http://peace.2ch.sc/test/read.cgi/db/1371476534/
13問目:http://toro.2ch.sc/test/read.cgi/db/1343899481/
12問目:http://toro.2ch.sc/test/read.cgi/db/1316769778/
11問目:http://hibari.2ch.sc/test/read.cgi/db/1299305530/
10問目:http://hibari.2ch.sc/test/read.cgi/db/1274791771/
9問目:http://pc11.2ch.sc/test/read.cgi/db/1252492296/
8問目:http://pc11.2ch.sc/test/read.cgi/db/1236253554/
7問目:http://pc11.2ch.sc/test/read.cgi/db/1223525474/
6問目:http://pc11.2ch.sc/test/read.cgi/db/1210940477/
5問目:http://pc11.2ch.sc/test/read.cgi/db/1193486961/
4問目:http://pc11.2ch.sc/test/read.cgi/db/1176553195/
3問目:http://pc11.2ch.sc/test/read.cgi/db/1160458216/
2問目:http://pc8.2ch.sc/test/read.cgi/db/1141622643/
帰ってきた:http://pc8.2ch.sc/test/read.cgi/db/1124178925/
Part 2:http://pc8.2ch.sc/test/read.cgi/db/1103113155/
初代:http://pc8.2ch.sc/test/read.cgi/db/1056973582/

4 :
よくある質問1
(問)
ID | DATE     | DATA
--+----------+-----
1 | 2007-11-11 | aaa
2 | 2007-11-11 | bbb
1 | 2007-11-10 | ccc
3 | 2007-11-12 | ddd
3 | 2007-11-11 | eee
4 | 2007-11-10 | fff
1 | 2007-11-12 | ggg
このようなテーブルから、下記のように
1 | 2007-11-12 | ggg
3 | 2007-11-12 | ddd
2 | 2007-11-11 | bbb
4 | 2007-11-10 | fff
各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。
(答)
select A.ID,
    A.DATE,
    A.DATA
from TableName A
   inner join
   (select ID, max(DATE) as MAX_DATE
    from TableName
    group by ID
   ) B
   on A.ID = B.ID
   and A.DATE = B.MAX_DATE
;

5 :
よくある質問2
(問)
key   data
----------------
1     a
1     a
1     b
1     b
1     a
2     b
2     a
2     a
というテーブルから
key   a   b
--------------------
1    3   2
2    2   1
というExcelのピボットの様なデータを取得したいのですが、どういうSQLになりますか?
a,bというのは固定なので、仮にcというデータがあっても無視して構いません。
(答)
SELECT key,
    SUM(CASE data WHEN 'a' THEN 1 END) AS a,
    SUM(CASE data WHEN 'b' THEN 1 END) AS b
FROM table
GROUP BY key
ORDER BY key
;

6 :
よくある質問3
(問)
ID HOGE
01 A
01 B
01 C
02 A
03 B
HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか
(答1)
SELECT id
FROM TableName
WHERE hoge in ('A','B','C')
GROUP BY id
HAVING count(DISTINCT hoge) = 3
;
(答2)
select *
from TableName T1
where not exists (select *
         from (values 'A', 'B', 'C') T2 (HOGE)
         where not exists (select *
                  from TableName T3
                  where T1.ID = T3.ID
                  and T2.HOGE = T3.HOGE
                  )
         )
;
※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意

7 :
よくある質問4
(問)
列の数が可変な問合せはどう書きますか?
(答)
標準SQLでは書けません。
pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。
Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。
が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。
SQL Serverのpivot(2005以降)
http://msdn.microsoft.com/ja-jp/library/ms177410.aspx
http://www.sqlprof.com/blogs/sqldev/archive/2008/04/12/pivots-with-dynamic-columns-in-sql-server-2005-2008.aspx
Oracleのpivot(11g以降)
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_10002.htm#CHDCEJJE
http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html

8 :
よくある質問5
(問)
年月(YYYYMM)を指定し、その年月に対応する年月日を取得したい
 例:201006を指定したら、以下の結果を得たい
   20100601
   20100602
    ・
    ・
    ・
   20100630
(答)
SQLでは存在しないデータを生成することはできません。
この問いの場合は素直にカレンダーテーブルを用意しましょう。
どうしてもやりたければ以下のような方法もなくはないですが、
再帰問合せの本来の使い方ではありません。
やめておくことを強くお奨めします。
(PostgreSQLのgenerate_series()関数なら辛うじてセーフかもしれませんが
 賛否の分かれるところでしょう。)
with TEMP (NUM) as (
    select 1 from dual
    union all
    select NUM + 1 from TEMP where NUM < 31
)
select to_char(to_date('201006', 'YYYYMM') + NUM - 1, 'YYYYMMDD')
from TEMP
where to_date('201006', 'YYYYMM') + NUM - 1 < add_months(to_date('201006', 'YYYYMM'), 1)
;
※上記はOracleの場合です。(11gR2以降)
※再帰問合せをサポートするDBMSならこれを適当に改変すれば動きますが
 どのみちお奨めしません。

9 :
以上、テンプレ終わり

10 :
誘導されて来ました
・DBMS Mysql
・テーブルデータ
■User
id:
account:
■Follow
id:
user_id:
follow_id:
■Tweet
id:
text:
user_id:
is_replay: boolean
is_delete: boolean
・ほしい結果
Twitterのようなものを作っていて「フォローしてるユーザーのタイムラインの表示」をするのがとても遅いです
・説明
こんな感じのDB構成で、自分がフォローしてるユーザー+自分のつぶやきを取得するには
SELECT follow_id FROM follow WHER user_id: 自分のid
上記のクエリでfollowしてるユーザーのIDを引っこ抜いた後に
SELECT * FROM tweet WHERE user_id IN ( 1, 233 , 222 , 333 ...上で引っこ抜いたIDのリスト) AND is_replay = 1 AND is_delete = 0
のように取得しています、これが2000人くらいになるととても遅くなってしまいます高速化する方法をアドバイス頂きたいです

11 :
tweet.user_id にインデックスを貼る。mysql の挙動しらないけど、まずは。

12 :
>>11
そこにはインデックス貼ってますが、例えばフォロワーが1000人とかになるとインデックスを利用していてもやっぱり数が増えてしまいまして

13 :
じゃあ次はその無駄に分かれているクエリをひとまとめにして、プランナに優しくする。

14 :
>>10
それどこが遅いんだよ?
ホストアプリでINのリスト作るところかSQL発行するのが遅いんじゃないのか?
素直にINをサブクエリにしてSQL発行1回で済ましてみろよ
SELECT * FROM tweet WHERE user_id IN ( SELECT follow_id FROM follow WHER user_id: 自分のid ) AND is_replay = 1 AND is_delete = 0
このクエリで実行計画みて、話はそれからだな
まさかと思うがFollowはuser_idにインデックスがないって事はないだろうな
(user_id,follow_id)で主キーにするか複合インデックス張ってみろ

15 :
>>10
主観が多い
何件のtweetに対して何msかかって遅いといっているのか?
Explainの結果を貼るのがより良い
SQLが汚い
きちんとログから貼りなさい
解答もその汚いSQLから作られるので、そのままでは動かなくて困るだけだ
速度の話をするなら利用しているIndexぐらいは貼ろうよ

16 :
ログのSQLを直打ちで速度見てみることとついでにEXPLAINだな

17 :
>>13-14
INのリストを作るところは殆ど時間かかっていませんでした(10ms程度)
フレームワークを使っていてラップされているのでSQLの発行が遅いってのも多分無いと思います

SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`is_deleted` = 0 AND `tweets`.`is_replay` = 0 AND
(user_id IN (SELECT follow_id FROM `users` INNER JOIN `follows` ON `users`.`id` = `follows`.`user_id` WHERE `folllows`.`user_id` = *user_id*)) ORDER BY tweets.updated_at DESC
ご指摘頂いたとおりこんな感じで取得した場合、INで並べるよりは多少早くなりました!ありがとうございます
10000ms -> 4000ms
Indexに関しては
>>15
Follow
-user_id index_user_id
-folloe_id index_follow_id
-複合 index_user_id_and_follow_id
Tweet
- user_id index_user_id
- 複合 index_user_id_and_is_replay
こんな感じで貼ってます
>主観〜
申し訳ありません気をつけます
テストデータとして以下のとおり挿入されています
Tweet数が50万件
User数が5万件
Followが10万件
今回テストケースに利用したユーザーはこうなっています
Follow 5000件
Tweet 5件
Tweet(Follow) 25000件
>>16
EXPLAINをしたところフォロー一覧の取得、つぶやきの取得共にindexは適切に使われていました
1 PRIMARY tweets ref user,index_user_and_is_replay index_user_and_is_replay 32 const 25000 Using where
1 PRIMARY users eq_ref PRIMARY PRIMARY 4 twitter.tweets.user_id 1 Using index
2 DEPENDENT SUBQUERY follows ref user,index_user_id_and_follow_id index_user_id_and_follow_id 10 const,func 1 Using where; Using index
2 DEPENDENT SUBQUERY users eq_ref PRIMARY PRIMARY 4 func 1 Using where

18 :
【2chスレッド勢いランキングサイトリスト】
★+ニュース板
・2NN (推奨サイト)
・2chTimes
★+ニュース板新着
・2NN新着
・Headline BBY
・unker Headline
★+ニュース板その他
・Desktop2ch
・記者別一覧
★全板
・全板縦断勢いランキング (推奨サイト)
・スレッドランキング総合ランキング
・ログ速
★全板実況込み
・2勢
・READ2CH
・i-ikioi
※ 要タイトル検索
※ 2chブラウザ併用推奨

19 :
>>17
よかよか。
んじゃ次は in を exists に置き換えて試してみよう。
サブクエリ内でusersを結合する理由がないなら外そう。

20 :
>>17
なんで>>10のSQLから>>17のSQLになるんだ?
usresなんてどっからでてきたんだよ
>フレームワークを使っていてラップされているのでSQLの発行が遅いってのも多分無いと
多分とかじゃなくてフレームワークつかわずSQL直接発行して試せよ
あとMySqlの実行計画の見方は詳しくないんだが
followsのindex_user_id_and_follow_idでキー長が10
usersのPRIMARYでキー長が4
だよな
おそらくusersのPRIMARY=user_idで4だから
index_user_id_and_follow_idでからuser_idひいたらfollow_idは長さ6?
index_user_id_and_follow_idのredがconst,funcって、funcは桁数変換?
正確な情報が少なすぎる
>>19
inをexistsにするぐらいなら、joinで書きなおした方が良いんじゃね

21 :
>>17
それはそうと、リプライ(reply) と リプレイ(replay) は違うよ。
>>20
joinでもいいと思う。

22 :
>>20
inとexistsはオプティマイザによる変換難しいけど
existsとjoinはオプティマイザが簡単に変換するから
読みやすいほうで良いでしょ

23 :
なんか、in exists join 関連の話よくループするね。
テンプレ入りするかも?しないかも?

24 :
>>20
mysqlのexplainを読めないなら黙ってても良いんだよ?

25 :
不手際が多く色々と混乱させてしまったみたいで申し訳ありません
ご指摘どおり joinへの置換えを行った所
10000ms→4000ms→0.04msまで落ちました
本当にありがとうございました

26 :
>>24
じゃああなたが>>20の疑問点に解説を

27 :
おめでとー

28 :
>>17が最初に質問した元スレで話題になってたんだけど
468 名前:nobodyさん[sage] 投稿日:2014/06/19(木) 11:53:09.08 ID:???
彼は解決したって書いてるけどjoinを使うことでサブクエリが先に消化されてソート対象がメモリ上に乗るサイズになっただけで結局もっと数が増えたらメモリに乗らなくなってまた遅くなるよ
10万件程度のデータでもメモリに載り切らなくなるのはわかりきってるしTwitterみたいに大きくないから大丈夫なんて言える問題じゃない
みたいな書き込みがあったんだけどそうなの?

29 :
お察しレベル。
元スレどこなの?

30 :
>>29
やっぱレベル低い争いなのか
http://nozomi.2ch.sc/test/read.cgi/php/1389438240/

31 :
>>28
INは全表をメモリに載せようとするけど
JOINやEXISTSはしないで(HASH) SEMI JOINやINDEXで精査しようとするから速いんだよ
ただ、JOINやEXISTSの方式でも件数が影響するので
桁がかなり増えれば、当然遅くなる
最近オプティマイザも賢くなったがな

32 :
あんまりORM批判はしたくはないが
INはORMで簡単に実装できるからよく使われるのに対して
テンプレに載せようかって話す位の常識を知らないやつが増えたね

33 :
>>31
それMySqlの話?
なんかググっても、MySqlにはネステッドループとその変形しか実装されてないって書いてあるんだが
一般論なら、今時はINもEXISTSと同様に展開するんじゃね
まあ、結局はオプティマイザの出来次第なんだが

34 :
SQLServer2005です
数年分のログを2週間ずつページングして表示させたいです
取り敢えず最初のページのケツの日付を次ページの先頭条件としてみましたが、当然前ページのと被ってしまいます
各ページの先頭行を取得するにはどのようにすればよいでしょうか?

35 :
ページ番号から計算すればよさそうなもんだけど。

36 :
>>33
existsはjoinの変形とできるけど、inは違うから一概には一緒にはできないよ
オプティマイザが賢ければやってくれるんだけどね
MYSQLは5.6.5からNEST以外のjoin方法が実装されたよ

37 :
カラムの値を11倍にして格納したいんですが、どう書けばよろしいでしょうか?
検索しても2000を10000に置き換えるといった置換ばかりかヒットして思うように見つけられません
ご教示お願いいたします

38 :
update tbl set col = col * 11where 〜

39 :
>>38
ありがとうございます!
たすかりました!

40 :
>>34
> 取り敢えず最初のページのケツの日付を次ページの先頭条件としてみましたが、当然前ページのと被ってしまいます
被るの嫌なら、ケツの次の日にすればいいだけじゃないのか?
そもそも要件が2週間毎なら、>>35 の言うようにページ番号から計算すればいいだけだろ。

41 :
日付に時間が含まれてるかどうかとかいろいろ細かい考慮点はあるにはあるけど
開始を<=じゃなくて<にするとか、そんな程度の話じゃないの

42 :
こんにちはいつもお世話になります。
mySQLとPHPで会社の案件管理をつくっています。
日付で抽出し、たとえば6月の案件一覧を見ているとします。
そこであるレコードを修正して戻ってくると、抽出が解除され全件表示になります。
こういうときに前の抽出状態を維持するいい方法はありませんけ
よろしくお願いします

43 :
>>42
なにで編集してるの?

44 :
どうせ phpMyAdmin の話だろ・・・

45 :
phpmyadminって条件維持されなかった?

46 :
mysqlスレに帰れよ

47 :
こんばんは。
DreamWeaverでハンドコーディングしています
IE上で動く案件管理DBです

48 :
>>42
内容的にmysqlスレかphpスレで聞くべき物だよ
ここはSQLに関するもの以外は答えない
http://peace.2ch.sc/test/read.cgi/db/1376466127/
http://nozomi.2ch.sc/test/read.cgi/php/1397862294/
どっちかにお行き

49 :
フレームワークでもなく自作なんだし、間違いなくPHPスレ。

50 :
まあそう言わんと

51 :
マジレスすると、
ここでお前にマジ回答しても絶対に理解できない
スレ違いな上に分からせることが不可能という二重苦

52 :
こう見えても基本情報技術者や電気工事士もってるプロですよ!

53 :
私が優秀で嫉妬してるから教えたくないんですね
それともわからないんですか?偉そうなこと言ってるのに口だけなんですね!

54 :
電気工事士はいいけど
基本情報技術者とかゴミやん。アマの証だろ

55 :
ちなCADトレース技師初級もあります

56 :
>>55
初級かよ。最低中級とってこないと

57 :
よそなら挑発して回答もらえるだろうけど、ここでは無理だな
大人しくphpスレいきゃよかったのにね
あっちとこっちと重複してる住人も多いかもしれんけど

58 :
SQLServer2008です。
コミットの最中にネットワーク障害などが起きてコミットが中断された場合、
更新系SQL1、2、3と実行していたもののうち、1だけがロールバック
され、残りはコミットされるということは起こりえますか?

59 :
Microsoft SQL Server 総合スレ 10
http://peace.2ch.sc/test/read.cgi/db/1385363382/

60 :
>>58
それ同一トランザクション前提だよな?
そんな事がおこったら、トランザクションの一貫性が保ててない欠陥DBMSです

61 :
>>60
もちろん同一トランザクションでのことです。

62 :
"売上"表に含まれない商品コードを"商品"表から抽出している。
言い換えれば、"売上"表に存在していて"商品"表に存在しない商品コードを抽出している。
SQLを勉強していたらこういう記述を見かけたのですが、
どうしても理解できません。
前者の文と後者の文では結果が違うと思うのですが・・・

63 :
言い換えれば、"売上"表に存在していて"商品"表に存在しない商品コードを抽出している

言い換えれば、"商品"表に存在していて"売上"表に存在しない商品コードを抽出している
だね。技術書って専門家が書いている割にこういう誤植がよくある。
金出して買ったんなら、出版元にガンガン文句言ってやれ。
出版業なら校正に命賭けろってね。

64 :
>>62
本によっては誤植お知らせみたいなのが載ってるから調べてみるといいかもね。

65 :
なんで? なぜわざわざ「言い換えれば、」と前置きしてるのか、このSQLが例示されてないから
真意は不明だけれど、国語の問題じゃあ無いんだからこういう発想で捉えれば、このSQLでも
同じ結果は得られるんだよ  という解説にも読めるんだけどな。 おまえら、そういう発想でSQL
書いたりすること無いのか?

66 :
>>65
>>62の前後で別のクエリが記載されてるのかなぁという気はしなくもないが、
それよりあなたの日本語。

67 :
空気を読まずに、教えてください。
[DB]
PostgreSQL 9.3
[やりたいこと]
親子関係の定義をしているテーブルから特定の親から子、孫、、、な関係にあるレコードを再帰的に検索し、
結果に、大本の親のレコードの id と、子(ryのレコードの id を一緒に表示させたい。
[テーブルデータ]
id  parent
-------------------
1  NULL
2  1
3  1
4  3
このテーブルはそれぞれのレコードの親となるレコードの id を格納しています。
この例の場合は id 1 のレコードの子(ryとして、2, 3, 4 のレコードを抽出することが出来ます。
[得たい結果]
上記のテーブルに対して親レコードの id として 1 を指定した場合に、以下のようにデータを抽出したいです。
root id
-------------------
1   2
1   3
1   4
子(ryレコードを抽出する SQL は以下のようになると思います。※ネットの受け売りですが
WITH RECURSIVE r AS ( SELECT * FROM test_table WHERE id = 1 UNION ALL SELECT test_table.* FROM test_table, r WHERE test_table..parent = r.id ) SELECT * FROM r ORDER BY id;
実行結果は以下のような感じです。
id  parent
-------------------
2  1
3  1
4  3
これに大本の親レコードの id を表示させたいのです。
どのように SQL を書けばいいのか分からず、教えていただければと思いました。
何をしたいかと言えば、上記の SQL に複数の親レコードの id を指定した場合でも、子(ryレコードごとの大本の親レコードの id を識別できるようにしたいのです。
よろしくお願いします。

68 :
>>65
その日本語2文に対応して、同じ結果になるSQL二つ書いてみてくれ

69 :
>>67
WITH RECURSIVE r AS (
SELECT *,id as root_id FROM test_table WHERE id = 1 UNION ALL SELECT test_table.*,r.root_id FROM test_table, r WHERE test_table..parent = r.id
)
SELECT * FROM r ORDER BY id;
とかでどう?

70 :
◎2chスレッド勢いランキングサイトリスト◎
★+ニュース板
・ 2NN (推薦)
・ 2chTimes
★+ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★+ニュース板その他
・ Desktop2ch
・ 記者別一覧
★全板
・ 全板縦断勢いランキング (推薦)
・ スレッドランキング総合ランキング
・ ログ速
★全板実況込み
・ 2勢 (推薦)
・ READ2CH
・ i-ikioi
※ 要タイトル名検索
※ 2chブラウザ併用推奨

71 :
select * from tbl1 where a = 100 order by b;
こういうクエリを大量に投げてます。
tbl1のaだけじゃなくてbにもインデックス張った方が高速になりますか?

72 :
構成による
bが性別とかだったら張らないほうが早い
普通のデータのカラムなら張ったほうが良いけど
まあ試せばいいじゃん
トラン系だったらupdateとかinsert遅くなるのにも注意な

73 :
ありがとうございましたm(_ _)m

74 :
>>71
そのクエリならおそらく(a,b)の複合インデックスで早くなるけど
bの単独インデックスは有っても使われない
まあ、DBMSによるし、試すしかないけど

75 :
>>69
ありがとうございます。
助かりました。
もっとお勉強しないとダメですね。。がんばります。

76 :
データ消去後カラムidを指定せずデータを追加するとIDを飛ばし追加されますが
それはなぜでしょうか

77 :
autoincrement指定の場合、番号はテーブル外で記録しているから。

78 :
>>77
成程!
ありがとうございます!

79 :
truncateしてる?
DBMSによると思うけどtruncateでリセットされるのもあるよ

80 :
あるテーブルに対して数量の合計と単価の平均を取得して、
それを新しい列を生成してそこに挿入することはできますか?
それとSQL文中では四則演算を行うのは変でしょうか?

81 :
計算するタイミングをいつにするかで変わってくるのでもうちょっと詳しく
四則演算を入れるのはおかしくないと思うよ

82 :
>>80
> SQL文中では四則演算を行うのは変でしょうか?
変じゃないよ。
こんな感じのクエリを書けるよ。
select 商品名, sum(数量), avg(単価) from table_1 group by 商品名
あと、挿入という言葉は insert の意味で使われるので、避けたほうがいいよ。

83 :
>>81>>82
言葉不足ですみません
列Aと列Bを取り出して(列A+列B)を計算して
その結果を列Cとして新しく列を作りそこに表示させたいです
列A | 列B

列A | 列B | 列C
のような感じです
関数としてsumやavgはありますが、それよりも自由な計算を行いたいです

84 :
値をいちいちフィールドに埋め込んでしまうより計算した方が融通きくと思うんだけど。
その計算方法や列A(B)の値を変えた時なんかC列をupdateするわけ?

85 :
>>83
新しく作り、表示させたいというのは、テーブルに新しく列を作成し、そこに格納したいという話なの?
きっとそうではないだろうと思っているんだけど。
select 列A, 列B, 列A + 列B * 3 AS 列C
のような抽出をしたいだけなんじゃないかなと。

86 :
>>84
そういうわけではないです
無理にSQLに組み込む必要はないですかね
>>85
SQLのテーブル自体は変えずに
抽出する結果として列Cを作りたいです
書いていただいたSQL文が自分の希望に近いです

87 :
近いですワロタ。
テーブル構成も何も書かずに正解を出せるレベルにはなかなか達しないなぁ。
>>82がダメだったわけだから、こうかなぁ。
select 数量1 + 数量2 + ... + 数量n as 数量合計, (単価1 + 単価2 + ... + 単価n)/n as 単価平均 from あるテーブル
あと、言葉が不足しているのではなく、不適切な言葉が使われていることが問題です。

88 :
>>87
先ほど書いていただいた
select 列A, 列B, 列A + 列B * 3 AS 列Cで解決しました
「近い」という表現は変でした
ありがとうございました

89 :
あ、解決したならよかった。
がんばってね

90 :
group byの使い方がいまいちわからんとです
グループ化してそこから抽出しなくてもwhereで事足りるのではないかと思います

91 :
一例として、
id point
1 10
2 5
3 10
1 5
3 1
2 21
みたいなデータが収められているテーブルがあるとする。
これを
id point
1 15
2 26
3 11
みたいに、idごとにpointを合計するときなどに使える。

92 :
>>91
だからwhereとどう違うんだ

93 :
例えばwhereの条件にあうレコードの件数を知りたい時
一々結果の行数見るのは面倒でしょ
特定の月ごとの総売上の推移を知りたい時
結果のレコードを自分で計算するの?
group byは集計に使うのであって、絞り込みに使うんじゃ無いんだよ

94 :
>>92
試しにwhereで書いてみ?
ただしidは1〜3までとは『限らない』ことが仮定で。

95 :
必要ないなら無理に使わなくていいよ
必要に駆られたときに覚えればいい
この先DB触っていくならwhereだけで対処出来ないことが出てくると思うし

96 :
わからないなら使わなければいいだけのこと。
ってか英単語の意味で普通わかる気がするけど。

97 :
こんにちは質問です
画像のように、月ごとの小計つきの帳票を出したいのですが
SQLで一発でいい書き方ありますか
PHP側でやるべきですか
http://i.imgur.com/tnzkfBc.jpg

98 :
group by使え

99 :
こんにちは。
group by すると、各月に一件のレコードしか出なくなるんですけど
何がおかしいのでしょうけ?

100 :
日本語も英語も不自由なマッチ棒君キテンネ


100〜のスレッドの続きを読む
MySQL 総合 Part24
MariaDB
【DBMS】 HiRDB
Oracle 質問総合スレ14
データベースエンジニア向け資格の市場価値
MongoDB 1
☆ 世界最速のデータベース SAS ☆
  D  A  O  v s  A  D  O  
PL/SQLできない香具師が上級SE
PL/SQLできない香具師が上級SE
--------------------
【松田隆智 原作】拳児 三才歩【藤原芳秀】
DIR EN GREY 806 [転載禁止]c2ch.net
【IT】中国 次世代通信規格「5G」 きょうからサービス開始
【K3】DAHON ダホン 1台目【専用】
金蔵、どこ吹く風【一原ミナは今日も壁打ち】▲56
【天皇杯】辛斤 シ写 糸冬 単戈【金沢に惨敗で糸冬w】
パ界のカリスマDr.ナイフさん「蓮舫さんが正しい。ネトウヨの負け。最近のクラウドは仮想サーバー」2
【菅官房長官】シリアで不明の安田純平さん、新映像は本人と認識 「邦人の安全確保は最大の責務。解放に向け全力を尽くす」★3
みんなで語ろうキッツスポーツスクエア綾瀬35
奈良の10年後
RCサクセション・忌野清志郎総合スレの26
【不安障害治癒】「無我」の教え Part.2 【仏教、悟り】
狂言のしゃべりを聞くたびに不快になる!
プロレスで思いつく言葉を書くだけのスレ
【画像】生活保護受給者の食事がショボすぎる これどう見ても健康で文化的な最低限度の生活とは言えないだろ [324064431]
From TV animation SLAMDUNKシリーズ
】日本のメーカ製PCはボッタクリ【
【ホリデイラブ】 こやまゆかり32
絵を描くときの不安や苦悩を吐き出すスレ 33店目
【西日本豪雨】その支援、ちょっと待って。季節外れの衣服。場所を取る上、重い千羽鶴・・・★3
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼