SQL質疑応答スレ 18問目

1NAME IS NULL2018/01/04(木) 22:12:22.14ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 17問目
https://mevius.5ch.net/test/read.cgi/db/1468157341/

2NAME IS NULL2018/01/04(木) 22:13:25.04ID:???

3NAME IS NULL2018/01/04(木) 22:14:28.52ID:???
よくある質問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
;

4NAME IS NULL2018/01/04(木) 22:15:39.02ID:???
よくある質問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
;

5NAME IS NULL2018/01/04(木) 22:16:40.08ID:???
よくある質問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によって文法がかなり違うので注意

6NAME IS NULL2018/01/04(木) 22:17:39.88ID:???
よくある質問4

(問)
列の数が可変な問合せはどう書きますか?

(答)
標準SQLでは書けません。
pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。
Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。
が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。

SQL Serverのpivot(2005以降)
http://msdn.microsoft.com/ja-jp/library/ms177410.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

7NAME IS NULL2018/01/04(木) 22:48:11.80ID:???
ダメだ
ブロック条件が厳しすぎる
誰か残りのFAQを貼ってくれ

8NAME IS NULL2018/01/05(金) 02:46:10.18ID:???
よくある質問5

(問)
年月(YYYYMM)を指定し、その年月に対応する年月日を取得したい

 例:201006を指定したら、以下の結果を得たい

   20100601
   20100602
    ・
    ・
    ・
   20100630

(答)
SQLでは存在しないデータを生成することはできません。
この問いの場合は素直にカレンダーテーブルを用意しましょう。

9NAME IS NULL2018/01/05(金) 02:47:19.49ID:???
よくある質問5

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ならこれを適当に改変すれば動きますが
 どのみちお奨めしません。

10NAME IS NULL2018/01/05(金) 02:49:13.40ID:???
よくある質問5 (後半の訂正)

どうしてもやりたければ以下のような方法もなくはないですが、
再帰問合せの本来の使い方ではありません。
やめておくことを強くお奨めします。
(PostgreSQLの連番を生成する関数なら辛うじてセーフかもしれませんが
 賛否の分かれるところでしょう。)

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ならこれを適当に改変すれば動きますが
 どのみちお奨めしません。

11NAME IS NULL2018/01/05(金) 02:50:38.56ID:???
いちおつ
generate_series()関数がダメみたいだな

12NAME IS NULL2018/01/05(金) 21:56:46.58ID:???
前スレ971の回答でも貼っとくか

select T5."T3_ID"  "ID",
    T5."T3_日付" "日付",
    T5."T3_値"  "値",
    T5."T4_日付" "求めたい日付"
from  (select T3."ID"   "T3_ID",
        T3."日付"  "T3_日付",
        T3."値"   "T3_値",
        T4."T2_日付" "T4_日付",
        row_number() over (partition by T3."ID", T3."日付" order by T4."T1_日付" desc) "日付順"
    from  "TableName" T3
        left outer join
        (select T1."ID"  "T1_ID",
            T1."日付" "T1_日付",
            T2."日付" "T2_日付",
            row_number() over (partition by T1."ID", T1."日付" order by T2."値" desc) "値順"
        from  "TableName" T1
            inner join
            "TableName" T2
            on T1."ID" = T2."ID"
            and T2."日付" between add_months(T1."日付", -12) and T1."日付"
        ) T4
        on T3."ID" = T4."T1_ID"
        and T3."日付" > T4."T1_日付"
    where T4."値順" = 1
    or  T4."値順" is null
    ) T5
where T5."日付順" = 1
order by 1,2,3
;

13NAME IS NULL2018/01/06(土) 14:50:55.67ID:???
なるほど
全然速そうだな

14NAME IS NULL2018/01/06(土) 15:46:57.99ID:Os9t48kn
なんでそんな変なのばっかりなの?
ソートが頭から離れないのか。

15NAME IS NULL2018/01/07(日) 01:11:19.54ID:???
>>13
パーティション切ってrow_numberで先頭行だから
オプティマイザの出来次第だけどパフォーマンスに大差はないと思うけど
相関サブクエリとjoinなら同じ実行計画はいたりするし

>>14
はいはい
どうせ正解は書かないんじゃなくて書けないんでしょ

16NAME IS NULL2018/01/07(日) 10:01:46.51ID:yu9dE7vj
なんというレベルの低さ

17NAME IS NULL2018/01/07(日) 12:26:12.96ID:???
>全然速そうだな

変な日本語を何とかしろよ

18NAME IS NULL2018/01/07(日) 14:04:49.83ID:yu9dE7vj
>>15
>>3 を見たのか?

19NAME IS NULL2018/01/25(木) 18:41:52.80ID:heRfYWvO
mysqlでサブクエリを asに代入するとき、常に1カラムしかasできないため
サブクエリだらけになってしまうのですが、これをスマートに1サブクエリとかで取得できませんでしょうか?

SELECT
(
 SELECT
  max(num)
 FROM
  sub_table
) as max_num ,
(
 SELECT
  min(num)
 FROM
  sub_table
) as min_num,
(
 SELECT
 avg(num)
 FROM
  sub_table
) as avg_num
FROM
main_table
↑main_tableに sub_tableの min max avgを盛り込もうとすると
サブクエリだらけになってしまう。

20NAME IS NULL2018/01/25(木) 19:27:52.27ID:???
これでそのSQLと同じ意味にはなる
何がしたいのかはよくわからんが

select sub.*
from (select max(num) as max_num,
       min(num) as min_num,
       avg(num) as avg_num
   from  sub_table
   ) sub
   cross join
   main_table
;

21192018/01/26(金) 09:39:10.20ID:IngnXOhQ
>>20
ありがとうございます!!

22NAME IS NULL2018/01/26(金) 12:43:24.38ID:pxozcjcA
自作自演?

23NAME IS NULL2018/01/26(金) 17:32:37.75ID:???
どうしてそう思ったの?

24NAME IS NULL2018/01/26(金) 20:18:17.38ID:???
感謝ぐらい好きにさせてやれよ歪んでるなあ

25NAME IS NULL2018/01/28(日) 15:06:04.05ID:Qiu5BIxt
明らかに情報不足なのに情報を補完して回答しているからな。

26NAME IS NULL2018/01/28(日) 17:13:34.73ID:27cZ5HqG
それはキミ、情報不足やない、キミの知識不足やろ。

27NAME IS NULL2018/01/28(日) 18:21:25.57ID:qkfYCnFE
>>26
メインテーブルとサブテーブルの結合条件がクロスジョインとは普通、思わない。

28NAME IS NULL2018/01/28(日) 18:34:16.20ID:???
>>27
> メインテーブルとサブテーブルの結合条件がクロスジョイン
え?

29NAME IS NULL2018/01/28(日) 18:55:59.94ID:???
>>19のSQLがクロスジョインだと思えないのは知識不足としか言いようがない

30NAME IS NULL2018/01/28(日) 19:07:37.13ID:???
>>20は何も補完」してないだろ。逆に>>19の意味不明な部分はそのまま字面通り解釈して回答してる。

31NAME IS NULL2018/01/28(日) 19:16:59.64ID:???
>>29
main_table と「sub_table」の cross join だと思ってるなら知識不足以前の話かとww

32NAME IS NULL2018/01/30(火) 17:05:33.92ID:???
やりすぎ防犯パトロール、特定人物を尾行監視 2009年3月19日19時7分配信 ツカサネット新聞
http://headlines.yahoo.co.jp/hl?a=20090319-00000026-tsuka-soci

この記事で問題になった通称やりすぎ防パトは、創価学会と警察署が引き起こしていたようです

掻い摘んで説明すると

・創価学会は、町内会や老人会、PTA、商店会等の住民組織に関し、学会員が役員になるよう積極的に働きかける運動を
 90年代末から開始し、結果、多くの住民組織で役員が学会員という状況が生まれた

・防犯パトロールの担い手は地域の住民と住民組織で、防犯活動に関する会議や協議会には、住民組織の代表に役員が出席する為
 防犯活動や防パトに、創価学会が間接的に影響力を行使可能となった

・防パトは住民が行う為、住民が不審者や要注意人物にでっち上げられるトラブルが起きていたが
 創価学会はその緩さに目をつけ、住民組織を握っている状況を利用し、嫌がらせ対象者を不審者や要注意人物にでっち上げ
 防パトに尾行や監視、付き纏いをさせるようになった

・防パトは地元警察署との緊密な連携により行われる為、創価学会は警察署幹部を懐柔して取り込んでしまい
 不審者にでっち上げた住民への嫌がらせに署幹部を経由して警察署を加担させるようになった

・主に当該警察署勤務と考えられる創価学会員警察官を動かし、恐らく非番の日に、職権自体ないにもかかわらず
 私服警官を偽装させて管轄内を歩いて回らせ、防犯協力をお願いしますと住民に協力を求めて回り
 防犯とは名ばかりの、単なる嫌がらせを住民らに行わせた(防犯協力と称し依頼して回っていた警察官らの正体は恐らく所轄勤務の学会員警察官)
 ※これに加えて防犯要員が同様のお願いをして回る

・こうして防犯パトロールを悪用し、住民を欺いて嫌がらせをさせつつ、創価学会自体も会員らを動員し、組織的な嫌がらせを連動して行った

つまり警察署に勤務する学会員警察官、警察署幹部、創価学会が通称やりすぎ防犯パトロールの黒幕

詳細は下記スレをご覧下さい
やりすぎ防犯パトロールは創価学会と警察署の仕業だった
https://rio2016.5ch.net/test/read.cgi/bouhan/1516500769/

33NAME IS NULL2018/02/04(日) 15:27:38.88ID:gIv0OydZ
質問です
以下のようなTableAとTableBをTableAのIDで結合して、

1. TableBに特定のKEY(ここではKEY=2)が含まれているならそのデータを、
2. 含まれていなければ若いKEYのデータを、
3. KEYそのものが存在しなければNULL

を返す結果を取得したいです
どのようなSQLなら実現しますか?


「TableA」
ID | NAME
--+-------
1 | aaa
2 | bbb
3 | ccc
4 | ddd

「TableB」
ID2 | ID | KEY | DATA
--+----+-----+-----
1 | 1   | 1    | a_key1
2 | 1   | 2    | a_key2
3 | 1   | 3    | a_key3
4 | 2   | 1    | b_key1
5 | 2   | 2    | b_key2
6 | 3   | 1    | c_key1
7 | 3   | 3    | c_key3

「結果」
ID | NAME    | ID2 | DATA
--+---------+----------
1 | aaa | 2    | a_key2
2 | bbb | 5    | b_key2
1 | ccc | 6    | c_key1
3 | ddd | NULL | NULL

34NAME IS NULL2018/02/04(日) 15:29:21.67ID:gIv0OydZ
訂正

「結果」
3 | ccc | 6    | c_key1
4 | ddd | NULL | NULL

35NAME IS NULL2018/02/04(日) 17:18:13.30ID:???
>>33
SQL-Server なら
select T.ID as ID, T.NAME as NAME, T.ID2 as ID2, T.DATA as DATA
from (
select
row_number() over (
partition by TableA.Id
order by
case TableB.[KEY]
when 2 then 0 else 1
end,
TableB.[KEY] asc
) as R,
TableA.ID as ID,
TableA.NAME as NAME,
TableB.ID2 as ID2,
TableB.DATA as DATA
from TableA left join TableB on TableA.ID = TableB.ID
) T
where T.R = 1

36NAME IS NULL2018/02/04(日) 17:38:30.70ID:gIv0OydZ
>>35
ありがとうございます
使用しているのはMariaDB 10.1でしたが(書き忘れ失礼しました)、頂いた解答をヒントに試してみます

37NAME IS NULL2018/02/04(日) 18:26:18.34ID:???
>>36
う〜ん、MariaDB使ったことないけど
https://mariadb.com/kb/en/library/row_number/
を見るとrow_number()は10.2.0以降でないとダメみたい
10.2.0には上げられないの?

38NAME IS NULL2018/02/04(日) 18:33:52.86ID:gIv0OydZ
>>37
こちらもちょうどそこに行き着いてました
バージョンを上げることは可能なので最新版にアップデートして試してみようと思います
わざわざ調べて頂き感謝します

39NAME IS NULL2018/02/14(水) 13:22:57.02ID:???
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆

40NAME IS NULL2018/02/15(木) 23:04:18.91ID:???
SQLがなかなか覚えられません
SELECT が先頭に来るのは覚えていますが、
次がFROMか、WHEREか迷ったりします
なにか覚えやすい方法ってありますか?

41NAME IS NULL2018/02/15(木) 23:30:33.91ID:???
暗記

42NAME IS NULL2018/02/16(金) 00:34:33.15ID:???
>>40
順番はきっちり決まってるから覚えれば迷うことはない
それすら覚えられないならマやめた方がいい

43NAME IS NULL2018/02/16(金) 07:59:00.96ID:???
>>41-42
ありがとうございます
覚えます

44NAME IS NULL2018/02/22(木) 17:16:09.65ID:???
集計で、nullがあれば0で、nullが1つもない場合は最大値や最小値を取ってくるような書き方ってないでしょうか?

45NAME IS NULL2018/02/22(木) 18:10:39.74ID:???
>>44
CASE式で

SELECT c1,
CASE (SELECT count( * ) FROM t1 AS a WHERE a.c1 = b.c1 AND c2 IS NULL)
WHEN 0 THEN sum(c2)
ELSE 0 END
FROM t1 AS b
GROUP BY c1

設計見なおしたほうがいいパターンだと思う

46NAME IS NULL2018/02/22(木) 18:30:09.05ID:???
少し違うやり方だけどこっちのほうがパフォーマンスはいいかも。

SELECT c1, CASE sum(c3) WHEN 0 THEN sum(c2) ELSE 0 END
FROM (SELECT c1, c2, CASE WHEN c2 IS NULL THEN 1 ELSE 0 END AS c3 FROM t1) AS t2
GROUP BY c1
ORDER BY c1;

47NAME IS NULL2018/02/23(金) 10:11:31.58ID:???
>>45 >>46
ありがとうございます!
後者の方が問い合わせが少ない感じで良さそうですね。

48NAME IS NULL2018/02/23(金) 21:55:14.87ID:0la0B0YA
uelect文を2つ書いてunion allの方がよっぽど可読性が高い。

49NAME IS NULL2018/02/23(金) 22:08:01.48ID:KWaEL2bi
union言いたすぎてuelectになっちゃう奴カワユスw

50NAME IS NULL2018/02/23(金) 23:22:19.25ID:???
>>48
その可読性が高いやつ提示しなよ

51NAME IS NULL2018/02/24(土) 09:47:28.16ID:???
uelectあるじゃん

52NAME IS NULL2018/02/24(土) 10:02:55.41ID:???
ウェレクト

53NAME IS NULL2018/02/24(土) 19:12:40.41ID:Au0dOZ0B
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having 列名 is null
union all
セレクト max(カラム名) as カラム別名 from テーブル名 group by グループ列名 having 列名 is not null

54NAME IS NULL2018/02/24(土) 20:27:08.92ID:pUuArQ+S
uelectになるのにビビってセレクトになっちゃう奴カワユスw

55NAME IS NULL2018/02/24(土) 20:41:54.02ID:???
いつもSQL書かずに意味不明なイチャモンだけつけてた人が
珍しくSQL書いたと思ったらやっぱり意味不明なSQLじゃんか
havingの意味分かってないんだろうな

56NAME IS NULL2018/02/24(土) 20:54:00.99ID:pUuArQ+S
>>55
おい勘違いするな
いつも意味不明なイチャモンつけてるアゲは俺だ
アゲだからといってバカと一緒にされては困るなw

57NAME IS NULL2018/02/25(日) 00:08:49.03ID:???
union all期待してたのに。。。こんな結果なの??

>>45のやつはCASE WHEN EXISTSにしたほうがよかったね

58NAME IS NULL2018/02/25(日) 03:10:53.80ID:???
SEなんだが殆ど要件定義とか折衝が主担当だから
SQLの知識があんまりなくていつも効率悪い調査の仕方だったりベンダーさんに投げてしまったりになってしまうんで質問させてください
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
実業務ではベンダーさんからの報告で解決したのですが次からは自分でも頑張ってみたくて勉強したのですが実際に書こうと思うと全く上手くいきませんOTL

59NAME IS NULL2018/02/25(日) 03:25:04.65ID:???
>>58
とりあえず自分の思うように書いてみ

60NAME IS NULL2018/02/25(日) 03:51:57.01ID:???
>>59
すみません構文もめちゃくちゃだし途中まで書いてわからなくなっちゃったのですが
上から一つ目
select B.名前,B,社員番号 from Aテーブル A inner join Bマスタ B
on A.名前 = B.名前 or A.上長名前 = B.名前
where
A.日付 between B.適用開始日 and B.適用終了日
 
ってとこまで書いて挫折してしまいました・・・・・
COUNT、EXISTSを使えばよさそうだなとは思うのですがどうでしょう?
ちなみに2つ目のはまったく見当もつかない状況です・・・・

元は営業職で今期から情報部に異動してきて勉強はしてるのですがまったくわかりません・・・
本職SEの方の文の書き方の考え方のコツなんかも教えていただけるとうれしいです

61NAME IS NULL2018/02/25(日) 15:25:45.40ID:EdN+hOz0
>>55
having に集計関数と書かずにカラム名と書いたら、見事にそこだけ問題視するんだな。

セレクトと書いているのもSQLインジェクション対策に引っかかるため。

62NAME IS NULL2018/02/25(日) 15:27:53.61ID:EdN+hOz0
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having グループ列名 is null
union all
セレクト max(グループ名) as カラム別名 from テーブル名 group by グループ列名 having max(グループ名) is not null

63NAME IS NULL2018/02/25(日) 15:29:20.92ID:EdN+hOz0
曖昧質問に対して勝手な想像で要件を決めつけて答えるのはよくない。

そもそもSQLをずばり教えてくれというのが間違い。

64NAME IS NULL2018/02/25(日) 15:31:10.48ID:EdN+hOz0
>>57
select句にselect文を書くのを推奨するな。

65NAME IS NULL2018/02/25(日) 15:37:06.31ID:EdN+hOz0
>>60
あなたが書いているとおりに書けばよい。

なぜ一つのSQLでいきなりやろうとするのか?

66NAME IS NULL2018/02/25(日) 15:39:24.08ID:EdN+hOz0
>>60
3パターンの整理をせよ。

67NAME IS NULL2018/02/25(日) 15:44:37.91ID:EdN+hOz0
>>60
それあなたのいう1つ目もできていない。
少なくともそのSQLにこだわりがあるのなら、内部結合ではなく外部結合しなければ、1つ目も達成できていない。

68NAME IS NULL2018/02/25(日) 15:45:55.07ID:???
>>62
ここで動かしてみてくれよ
そういうクエリでも動くDBMSがあるんならぜひ知りたい
http://sqlfiddle.com/#!17/05796a

69NAME IS NULL2018/02/25(日) 15:46:29.20ID:???
>>64
なんで?

70NAME IS NULL2018/02/25(日) 17:49:37.39ID:fHMtmeQ2
順当にバカが発狂しとるなw

71NAME IS NULL2018/02/25(日) 18:35:17.10ID:???
>>60
1. SQLの研修を受ける
2. 最小限のテストデータを作成して試行錯誤を繰り返す
3. 少し高度なクエリをWebや書籍で学ぶ

まず1と2をやること(>>58のやつはSQLの研修を受講すれば解決できるレベル)
基本的なクエリは問題なく出来るようになってから3に進む
3はミックのブログやセルコの本がおすすめ

72NAME IS NULL2018/02/25(日) 18:36:47.80ID:???
あと要件定義が主な担当なら
SQLの書き方よりもDB設計を学んだほうが役立つ度合いが大きいよ

73NAME IS NULL2018/02/25(日) 21:06:12.14ID:???
>>58
http://sqlfiddle.com/#!9/81ab8/1

2つめはfilter句が使えるDBもあるけど普通はCASE式かな

74NAME IS NULL2018/02/26(月) 00:51:55.29ID:???
>>71
SQLの受講は予定してるけど・・・
ここってそういうの教えてくれる板じゃないの?
勉強法なんて聞いてないんだが

75NAME IS NULL2018/02/26(月) 02:37:26.99ID:???
こいつはクズだね〜w
営業をお払い箱になって情シスでもお荷物だな

76NAME IS NULL2018/02/26(月) 02:57:29.29ID:???
簡単に解決できるレベルとかいって勉強法講釈たれる奴もどうかと思うがな

77NAME IS NULL2018/02/26(月) 14:57:52.44ID:???
>ベンダーさんに投げてしまったりになってしまうんで
とか言ってるやつがこのスレに投げるだけになるんだぜ
鬱陶しいだろ

78NAME IS NULL2018/02/26(月) 16:34:56.99ID:???
問題を解くコツを教えてもらおうとする前に基礎を学べってことだろ
内部結合や外部結合は算数で言えば四則演算レベルの基礎なんだからさ

79NAME IS NULL2018/02/26(月) 19:15:23.41ID:k450wkRK
教えたがりのくせに質問には答えたくないてどないやねんw
そのややこしい承認欲求どうにかしろやw

80NAME IS NULL2018/02/26(月) 20:28:10.94ID:???
>>60だけど
やっぱりSEって気持ち悪いな
ベンダー嬲り倒すことにしたわ
てか早く答えろやwwwPGしかできないアホなんだからこれくらいすぐ答えだせwwwwww

81NAME IS NULL2018/02/26(月) 20:56:37.17ID:???
答え出てるだろww

82NAME IS NULL2018/02/26(月) 20:59:21.87ID:???
>>81
どこが出てるんだよwwwwww
やっぱSEって頭おかしいのしかいないのなwwwwww

83NAME IS NULL2018/02/26(月) 21:13:20.39ID:???
おまえマジかww
回答してくれた気持ち悪いエス・イーさんの親切心台無しだなww

84NAME IS NULL2018/02/27(火) 20:04:14.37ID:???
困ったら黙っちゃうSEさん達現実でも2ちゃんでも同じなんだね・・・・・

85NAME IS NULL2018/02/28(水) 08:09:46.03ID:???
>>44
これでもいける
select c1,
case when count(*) = count(c2)
then max(c2)
else 0
end
from t1
group by c1
order by c1

86NAME IS NULL2018/02/28(水) 16:49:50.76ID:???
>>85
そんな答え出てるものより60でも答えたれや

87NAME IS NULL2018/02/28(水) 18:05:33.63ID:???
60も答えでとるやん

88NAME IS NULL2018/02/28(水) 19:44:20.59ID:F+U9w50n
>>87
それではその答えを31文字以内で示しなさい。

89NAME IS NULL2018/02/28(水) 19:49:58.19ID:???
>>87
どこにでてんだよwwwwww
あほかよSEさんwwwwww

90NAME IS NULL2018/02/28(水) 22:18:01.64ID:???
二人もおるんかww
インターネッツの使い方も知らないんやなwwwププッ

91NAME IS NULL2018/03/01(木) 07:11:43.52ID:???
箇条書きの条件それぞれのsqlつくればいいのか?
それなら簡単じゃね

92NAME IS NULL2018/03/01(木) 07:52:43.33ID:RvibXfFY
簡単じゃねえ!

93NAME IS NULL2018/03/01(木) 11:39:27.35ID:hRou4xtV
これは「SQLの研修行け」の人が正解だったな

94NAME IS NULL2018/03/01(木) 12:18:12.52ID:/b0teX7H
>>93
バカはお口にチャックで

95NAME IS NULL2018/03/01(木) 15:53:17.90ID:???
>>92
どの辺が簡単じゃないの?

96NAME IS NULL2018/03/01(木) 18:35:19.24ID:???
こんな簡単な SQLも教えられないとかゴミしかいないんだなここ
そりゃ営業上がりに馬鹿にされるわけだわ

97NAME IS NULL2018/03/01(木) 18:42:45.36ID:???
>>96
簡単なSQLだからこそ

98602018/03/01(木) 18:53:30.95ID:???
ほらこの答え出るまで
俺居座るからなはやくだせや
他のやつ質問すんなよこれが最優先だから

99NAME IS NULL2018/03/01(木) 18:59:20.56ID:???
お前が質問してからのレスを全部読み返せよ、ゴミ

100NAME IS NULL2018/03/01(木) 19:05:25.93ID:???
簡単なSQLすら理解できない人に教えるとか無理ゲーやろ

101NAME IS NULL2018/03/01(木) 19:22:33.99ID:RvibXfFY
>>100
じゃあ誰に教えんだよw

102NAME IS NULL2018/03/01(木) 19:58:10.36ID:???
>>100
お前最高にアホだな

103NAME IS NULL2018/03/01(木) 20:18:58.38ID:???
>>101
>>102
お前ら池沼にSQL教えられんのか?

104NAME IS NULL2018/03/01(木) 20:26:35.43ID:???
>>58
Bを取り出すSQLを考える
select b.* from b
存在する社員をだす
 exists (select 1 from a where a.名前=b.名前)
本来欲しいのは逆なんだから
select b.* from b
where not exists (select 1 from a where a.名前=b.名前)

105NAME IS NULL2018/03/01(木) 20:45:45.55ID:???
かけ算も割り算も分かってないやつが
四角形と三角形の面積の求め方を教えろと質問してるのと同じ状況なんだよな

かけ算も割り算も分かってないってことが分かってないレベルなら
かけ算がよくわからないので教えて下さいって言えるところまでは最低でも自力で勉強すべき

106NAME IS NULL2018/03/01(木) 20:51:29.51ID:???
例えが全然的を射てないんだよなあ
かけ算と SQL同列に語って池沼に教えるのと同じってw
お前の方がどうかと思うぞ 部下とか後輩から嫌われてない?w

107NAME IS NULL2018/03/01(木) 21:01:35.54ID:???
>>106
ガイジキタ━━━━(゚∀゚)━━━━!!

108NAME IS NULL2018/03/01(木) 21:09:42.85ID:RvibXfFY
悩める教えたがりクン>>105
愛くるしいよぅ〜wwww

109NAME IS NULL2018/03/01(木) 21:09:49.44ID:???
うわっ今どきキターとか使わないで
恥ずかしいから辞めた方がいいよ

110602018/03/01(木) 21:11:32.00ID:???
>>105
このスレ否定しちゃったよwwwwww
アホかwwwwwwお前は2度とここ見なくていいからwwwwww現実で偉ぶってろやwwwwww
みーんなおまえのこと嫌いだろうけどwwwwww

111NAME IS NULL2018/03/01(木) 21:31:25.75ID:???
>>109
キタ━━━━(゚∀゚)━━━━!!

112NAME IS NULL2018/03/01(木) 21:31:45.96ID:???
>>109
キタ━━━━(゚∀゚)━━━━!!

113NAME IS NULL2018/03/01(木) 22:04:21.50ID:???
内部結合/外部結合はかけ算/割り算レベル
それが分からないから難しいと思っちゃうんだろね

114NAME IS NULL2018/03/01(木) 22:08:38.92ID:???
なんで教えてくれたやつをまたスルーしてんの?

115NAME IS NULL2018/03/01(木) 22:50:37.36ID:RvibXfFY
>>114
どんだけお礼欲しがりなんだよw
はいはいありがとうございましたwwww

116NAME IS NULL2018/03/01(木) 22:51:54.37ID:RvibXfFY
ちょっとまて誰だ教えてくれたやつって?
何嘘ついてんだよ騙されたじゃねえか

117NAME IS NULL2018/03/02(金) 00:15:42.26ID:???
>>115
そういうことじゃないだろw

118NAME IS NULL2018/03/02(金) 00:19:18.61ID:???
リアルでよほど抑圧されてんだな
ガンバレよ

119602018/03/02(金) 20:44:32.05ID:???
>>104
答えになってないが?
あほ?

120602018/03/02(金) 20:45:48.81ID:???
>>118
PGSEさんは作業するだけだもんねー
大変だなあwww応援してるよ!頑張ってよ!

121NAME IS NULL2018/03/02(金) 21:51:10.04ID:oDhTFYq0
>>118
お前が頑張れよw

122NAME IS NULL2018/03/02(金) 23:06:21.55ID:ThHddFfe
SQL初心者スレ状態

123602018/03/02(金) 23:08:56.75ID:???
>>122
SQL初心者スレみたいな質問にもまともに答えられる奴が1人もいないってどうなん?

124NAME IS NULL2018/03/02(金) 23:14:33.21ID:ThHddFfe
>>123
データベース板は過疎板だから。いるのはインフラ屋ばかりでSQLはよくわからない。

125NAME IS NULL2018/03/02(金) 23:27:14.54ID:???
回答出てるのにレスが池沼だからスルーしてるだけだろ

12660 ◆YDp73vGOso3d 2018/03/02(金) 23:36:47.57ID:???
なんか俺のふりして頭おかしい人っぽく印象操作してるゴミSEがいるみたいだなトリップ付けとくわ

127NAME IS NULL2018/03/02(金) 23:38:29.13ID:???
>>126
で、回答はわかったの?

12860 ◆YDp73vGOso3d 2018/03/02(金) 23:40:48.89ID:???
>>127
1つ目の質問はこれでできると思うが
2つ目の質問が答え出てないぞ

129NAME IS NULL2018/03/03(土) 08:36:46.58ID:???
104答えたの俺だけど60バカみたいで何も考える気が無いみたいなんで
2つ目答えようとおもったけどやめるわ

13060 ◆YDp73vGOso3d 2018/03/03(土) 11:26:10.35ID:???
正直にできませんでしたってかけや

131NAME IS NULL2018/03/03(土) 12:26:43.72ID:lRXd5Nnq
別にせんでもいいのに5ちゃんでまで出来ない言い訳をしてしまうバカ正直なバカかわゆすw

1321292018/03/03(土) 14:46:46.78ID:???
教えてくださいっていったらおしえてあげる

13360 ◆YDp73vGOso3d 2018/03/03(土) 16:01:20.17ID:???
お前みたいななんの特徴も個性もないゴミSEが名前つけなくていいからね^ ^
名無しに戻って2度と戻ってくんなよ^ ^

134NAME IS NULL2018/03/03(土) 17:41:54.12ID:???
1週間もたってこの程度解決できない奴って
うちの会社だったらありえないわ
去年入った新人ですら余裕で解決できるぞ
やっぱ能力無いやつっているんだな

13560 ◆YDp73vGOso3d 2018/03/03(土) 19:37:31.76ID:???
>>134
な!こんな簡単な問題も解けないとか民度低すぎるわここ
あ!俺はもう SQLなんて民度低い言語勉強するのやめたからお前ら頼むな!

136NAME IS NULL2018/03/03(土) 20:38:19.21ID:???
その能力ない奴に使いっぱにされるSEさん可哀想・・・・・
SEやめよ

1371342018/03/03(土) 21:38:49.47ID:???
>>135
それぞれの名前、上長と結合したカウントをselect句に書けばいいだけだが
それすらかけないんだろw
添削してやるからかいてみろ

138NAME IS NULL2018/03/03(土) 22:33:41.88ID:???
このスレのスルー力のなさは民度低すぎと言われても仕方ないレベル

1391342018/03/04(日) 00:10:24.97ID:???
>>138
御託はいいから書いてみろよw
添削してやるって言ってるだろw

140NAME IS NULL2018/03/04(日) 00:37:32.72ID:???
懲りずにまた他人を語るやつw

141NAME IS NULL2018/03/04(日) 00:38:36.36ID:???
ウェレクト臭がするわ

142NAME IS NULL2018/03/04(日) 00:48:49.97ID:elOR/YZE
ウェレクトまだやっとったんかw

143NAME IS NULL2018/03/04(日) 00:59:59.63ID:aBRPubRf
俺と他人を混同してるようだな。

144NAME IS NULL2018/03/04(日) 01:15:14.67ID:elOR/YZE
なにコイツ有名人気取りかwwwww

145NAME IS NULL2018/03/04(日) 01:24:29.26ID:???
などとウェレクトが申しており

14660改め神 ◆YDp73vGOso3d 2018/03/04(日) 01:32:39.75ID:???
何意味わかんねえ事のたまわってるのお前ら
DB板とかいう糞過疎板とか初めて来たんだがなんだよその恥ずかしいコテ
いいから早く答えだけ書けばいいんだよ

147NAME IS NULL2018/03/04(日) 10:10:03.20ID:elOR/YZE
>>145
あん?あんま調子に乗るなよウェレクトくん?オコっちゃうよオレ

148NAME IS NULL2018/03/04(日) 16:57:22.20ID:???
ずぼしウェレクトw

149NAME IS NULL2018/03/05(月) 14:13:09.19ID:3Wgchkax
データベースのquery limit 75,000って何でしょうか?
ワードプレスを利用していますが、query limit 75,000を超えたとかで表示が制限されてしまいました・・・。

1時間で75000人以上はアクセスできないということでしょうか?
また、今後このようなエラーが起きたいために何かできることはないでしょうか?
不要なプラグインは既に削除しています。

よろしくお願いいたします。

150NAME IS NULL2018/03/05(月) 17:41:44.50ID:???
>>149
スレチ
WordPressのスレへどうぞ

1511492018/03/05(月) 19:20:20.57ID:TwTjzndW
いえ、でもmysqlの問題でもあるんですが・・・。

15260改め神 ◆YDp73vGOso3d 2018/03/05(月) 19:27:50.25ID:???
ググれゴミ
今は俺の答え出るまで他の質問受け付けてないから

153NAME IS NULL2018/03/05(月) 20:09:33.69ID:???
>>151
MySQLの問題でもないから
ホスティング会社に問い合わせてね

154NAME IS NULL2018/03/05(月) 20:10:09.44ID:???
>>152
ウェレクトは黙ってて

155NAME IS NULL2018/03/06(火) 05:00:29.05ID:???
>>152
お前、何様?
勝手に仕切んなボケ

156NAME IS NULL2018/03/06(火) 12:33:46.08ID:Ki/iiA5R
【ゴチ大杉漣(66)】 小森常務゜:(つд⊂):゜「致死量の放射能を放出しました」 【ブルマ鶴ひろみ(57)】
http://rosie.5ch.net/test/read.cgi/liveplus/1520303016/l50

15760改め神 ◆YDp73vGOso3d 2018/03/06(火) 20:00:31.31ID:???
うっせえSE如きが意見してんじゃねーよ
はやく答えろやゴミ
ってみんな思ってるからな?wwwそういうふうに思いながら仕事しろよ?wwwwww

158NAME IS NULL2018/03/07(水) 20:56:18.81ID:7USA4bpQ
そろそろ飽きてきたから俺が答えちゃおうかなwいいのか?お前ら?w

15960改め神 ◆YDp73vGOso3d 2018/03/07(水) 21:49:59.76ID:???
はやく答えろや

160NAME IS NULL2018/03/08(木) 07:15:45.81ID:???
アホコテはngにしてるからどうぞお好きに

16160改め神 ◆YDp73vGOso3d 2018/03/08(木) 10:26:18.12ID:???
でたー!wwwwww
NGにしてるで勝ち誇ってるやつwwwwww

162NAME IS NULL2018/03/08(木) 21:47:16.61ID:/+R2cp3T
>>160
ウェレクトは黙っとけまた恥かくぞ

163NAME IS NULL2018/03/09(金) 00:40:28.63ID:???
>>162
君がウェレクトじゃないのか?

164NAME IS NULL2018/03/09(金) 16:53:42.16ID:???
・SQLインジェクション対策はシングルクォートを空白に置換すればOK
・テーブルで年月のみを入れる項目は文字列型で定義
この辺を論破できないので悲しい...

シングルクォートなんてデータ入れねーよ m9(^Д^)プギャー
年月のみならサイズを小さくできるよといわれる

165NAME IS NULL2018/03/09(金) 18:01:49.05ID:???
いろいろヤバイなそれ

16660改め神 ◆YDp73vGOso3d 2018/03/09(金) 18:24:40.67ID:???
>>164
ここ君の日記帳じゃないよ
さようなら

167NAME IS NULL2018/03/10(土) 12:48:06.89ID:???
年月を文字型にすると
・比較相手によってはキャストが必要
・範囲チェックが働かない
・容量が増える

逆に年月を文字列型にするメリットって何かあるの?
あと速度的なとこも気になるね

168NAME IS NULL2018/03/14(水) 12:59:09.36ID:E2z4/zZm
>>164
いまどき数バイト削るためにコンピュータの数値型を使うのは時代錯誤。しかもリレーショナルデータベースでは文字として出力するのが優先だから文字表現でデータを格納するのが基本。

169NAME IS NULL2018/03/14(水) 15:47:30.57ID:???
釣り針がデカすぎ

170NAME IS NULL2018/03/14(水) 18:50:24.54ID:???
え、え〜〜!?
これは救いようもなくヤバイ

171NAME IS NULL2018/03/14(水) 19:40:23.59ID:9cJyYZaB
疑心暗鬼すぎる>>169かわゆすw

172NAME IS NULL2018/03/14(水) 20:12:41.81ID:???
疑心暗鬼? w

17360改め神 ◆YDp73vGOso3d 2018/03/14(水) 20:20:38.93ID:???
気持ち悪い話してないではやく>>60答えろやごみども

174NAME IS NULL2018/03/14(水) 20:24:27.64ID:9cJyYZaB
多くのゴミの中でも本当にゴミと言えるのは>>172だけやでw

175NAME IS NULL2018/03/15(木) 00:28:50.67ID:08yLtO65
>>167
int型の項目値を文字列に変換する方がはるかに負荷が大きい。

17660改め神 ◆YDp73vGOso3d 2018/03/15(木) 00:39:41.41ID:???
正直なそんな低レベルなDB設計してる奴がいるとこで働いてるお前がかわいそうだわ
んでそんな話どうでもいいから早く質問答えろな?

177NAME IS NULL2018/03/15(木) 00:52:07.97ID:???
年月は数字項目にしといたほうがトラブルが少ない。整合性チェックにもなる
文字列にして文字が入ってたりすると日付形式に変換する時エラーになる

178NAME IS NULL2018/03/15(木) 00:54:30.05ID:08yLtO65
>>167
キャストが必要というのもコンピュータの数値型を使っていても、最終的には文字列に変換する。

年月の同士の計算が膨大にあるのであれば理解できなくないが、日付項目同士の比較は日付型で行う。

コンピータの数値表現で扱ってしまうと、まず日付型に変換し、実在しない年月や、1ヶ月前、1ヶ月後、月末日等の特定に2段階のキャストが必要になる。

現実には存在しない年月を生み出してしまうリスクまでとる必要がない。

何度も言うが年月の単純計算などほぼないうえに、文字列に大小判定は気にせず、コンピータの数値ばかりこだわるのはリレーショナルデータベースを理解していないどころか、コンピータを理解していない。

179NAME IS NULL2018/03/15(木) 01:04:17.75ID:???
いつもの人ですねー
お薬出しときますねー

18060改め神 ◆YDp73vGOso3d 2018/03/15(木) 01:37:34.58ID:???
>>60の簡単なSQLも書けないアホが何言っても滑稽なだけですよ^ ^

181NAME IS NULL2018/03/15(木) 04:57:56.45ID:???

182NAME IS NULL2018/03/15(木) 17:36:45.04ID:???
一人で勝手にint型や数値型を持ちだしてそれを的外れな長文で否定w
文脈を理解してないどころか、一般常識を理解していない。

183NAME IS NULL2018/03/15(木) 20:48:02.74ID:S1KKHbYv
バカ必死やねw

184NAME IS NULL2018/03/17(土) 13:49:54.26ID:tBZQagyi
  ★★★根税制による格差解消は、赤犬を根絶しユダヤ支配を永遠に終わらせる為の決め手である。★★★

▲  この掲示板(万有サロン)に優秀な書き込みをして、総▲額148万円の賞金をゲットしよう!(*^▲^)v
  http://jbbs.livedoor.jp/▲study/3729/ →リンクが不良なら、検索窓に入れる!

185NAME IS NULL2018/03/18(日) 00:49:00.65ID:???
>>175
>>178
いつもCPU100%にしちゃうから勉強になります!!

186NAME IS NULL2018/03/18(日) 11:46:44.87ID:a+ovhjNW
それはSQLの書き方がおかしいんだろ

187NAME IS NULL2018/03/18(日) 15:36:28.47ID:???
ホントに文脈も一般常識も理解してないのな

18860改め神 ◆YDp73vGOso3d 2018/03/18(日) 23:26:43.98ID:???
統計情報も取らないアホ集団で仕事してるのはわかったから
はやく俺の質問答えてや^ ^

189NAME IS NULL2018/03/20(火) 22:22:54.01ID:Rscf1saE
>>185
CPUは使うものですよ。

190NAME IS NULL2018/03/20(火) 22:23:50.07ID:Rscf1saE
>>188
統計情報はユーザーが取るものではないぞw

191NAME IS NULL2018/03/24(土) 13:21:59.28ID:GEutIhi9
訳のわからんツッコミにさすがの神もタジタジの様子w

192NAME IS NULL2018/03/25(日) 01:04:30.70ID:yjy1y48X
MySQL (InnoDB) で ALTER TABLE をする際の振る舞いとしてテーブル単位のロックではなくインスタンス全体をロックしているような挙動を示しています
innodb_file_per_table を疑ったが ON だったのですが何が問題なんでしょうか

193NAME IS NULL2018/03/25(日) 01:39:47.58ID:???
>>192
MySQLスレへどうぞ

194NAME IS NULL2018/03/25(日) 17:11:51.29ID:???
>>192
追記:
原因の切り分けが非常に難しく、 AWS RDS を利用しているからこうなっているのか、
それともこの挙動が発生したインスタンスに大量のデータベース・テーブル(150万テーブル以上)が存在していることが問題なのか、
他に見落としている条件がないかを調査している。

195NAME IS NULL2018/03/26(月) 12:26:18.51ID:E8QJAuxE
テーブル数150万てwどうしてそうなったw

19660改め神 ◆YDp73vGOso3d 2018/03/26(月) 18:43:16.56ID:???
>>194
MySQLの問題だからねそれ。
あと今質問打ち切ってるよ?

>>195
150万って別に普通だと思うが?アホ?

19760改め神 ◆YDp73vGOso3d 2018/03/26(月) 18:44:41.84ID:???
ああごめんね。テーブル数150万はないわ。
どんな教育受けてきたん?
はいこの話終わり早く答えて

198NAME IS NULL2018/03/26(月) 21:34:19.88ID:???
>>197
お前は教育受けてないだろ

19960改め神 ◆YDp73vGOso3d 2018/03/26(月) 22:38:34.91ID:???
>>198
そうだね教えを請うたことないわ
いっつも享受する側だわ
スキーマテーブルレコードカラムの違いがわかんないアホがこのスレ使ってんなや!

200NAME IS NULL2018/03/27(火) 07:18:12.07ID:???
まだ居座ってるんだ
このかわいそうな人

201NAME IS NULL2018/03/27(火) 07:21:01.46ID:Sf3AYZp2
間違いを指摘された途端にブチ切れ始めた

202NAME IS NULL2018/03/27(火) 12:28:22.82ID:5YfwV0Ug
「指摘したって言う奴の指摘は大体間違っている」の法則

203NAME IS NULL2018/03/27(火) 12:34:14.84ID:???
意味不明

20460改め神 ◆YDp73vGOso3d 2018/03/27(火) 18:30:19.18ID:???
>>203
こんな簡単なSQLも作れないの?
仕事辞めた方がいいんじゃない?

205NAME IS NULL2018/03/27(火) 19:00:54.47ID:???
SQLの事だと思い込んでいる事も意味不明

20660改め神 ◆YDp73vGOso3d 2018/03/28(水) 21:03:37.12ID:???
>>205
きみ本当のあほみたいだから2度とこないでね

207NAME IS NULL2018/03/28(水) 21:25:27.44ID:???
>>206
150万テーブル作ってろゴミクズ

208NAME IS NULL2018/03/28(水) 21:37:10.33ID:???
>>206
お前生きてる価値無いから死ね

209NAME IS NULL2018/03/28(水) 22:42:12.95ID:???
>>207
書き間違えまで揚げ足取るってやべえなここの民度

210NAME IS NULL2018/03/28(水) 22:45:28.11ID:???
>>196
150万テーブルwww

211NAME IS NULL2018/03/28(水) 23:27:20.25ID:???
普通そんな所書き間違えるなんてしないよ

212◆YDp73vGOso3d 2018/03/29(木) 00:26:29.50ID:???
>>210
お前あほ?俺に安価つけてんなよゴミSEが

213NAME IS NULL2018/03/29(木) 01:27:17.73ID:???
読み間違えた挙句にアホ呼ばわりする人間が民度を語るなよ。みっともない奴だな。

214◆YDp73vGOso3d 2018/03/29(木) 01:35:47.13ID:???
>>213
君名前欄も読めないメクラさんかな?
民度どうこうなんて言ってないんだけど?
文体から伝わってくるんだけど加齢臭口臭やばいでしょあなた?

215NAME IS NULL2018/03/29(木) 03:34:49.63ID:???
>>212
あら「普通」の概念が破綻してる方がまたいらっしゃった

216NAME IS NULL2018/03/29(木) 12:25:25.63ID:siRTS5gv
あら「普通」の概念が堅固なバカがまたいらっしゃった

217NAME IS NULL2018/03/29(木) 12:33:58.03ID:???
>>214
ごめんなさい

218NAME IS NULL2018/03/29(木) 12:34:37.82ID:???
>>216
自己紹介おつ

219NAME IS NULL2018/04/03(火) 20:44:20.13ID:wbI218I7
select A1,A2 from tableA
select B1 from tableB

これをそのまま流すと結果は2行になりますが、
これをA1,A2,B1と1行でとる方法はないでしょうか

220NAME IS NULL2018/04/03(火) 21:07:32.04ID:???
書き忘れましたが、どちらも1行しか返さないSQLです

221NAME IS NULL2018/04/03(火) 21:10:17.03ID:???
>>219
それぞれの実行結果が1行しかないなら

select tableA.A1, tableA.A2, tableB.B1 from tableA, tableB;

222NAME IS NULL2018/04/03(火) 22:07:12.44ID:???
>>221
なるほど、ありがとうございます

223NAME IS NULL2018/04/04(水) 08:04:54.29ID:2HlnMqVc
MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか?

よく出るエラーメッセージはこんなやつです。
mysqli_set_charset(): Error executing query in DBのURL

MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。

224NAME IS NULL2018/04/04(水) 13:11:13.69ID:???
>>223
おそらくデータベースに設定している文字セットで不整合があるんだろうと思いますが
MySQLの設定方法に関する質問の場合は、ここで聞くよりも、
MySQL 総合 Part26
https://mevius.5ch.net/test/read.cgi/db/1499949595/
で聞いた方が良いかと思います。

MariaDBに関するスレもあります。覗いてみると良いかもしれません。
https://mevius.5ch.net/test/read.cgi/db/1360677476/

225NAME IS NULL2018/04/04(水) 16:32:49.81ID:+pp14tKO
誤爆かもな

226NAME IS NULL2018/04/04(水) 21:47:48.32ID:???
with句で取得した数列を別のテーブルでその数列と一致するレコードを取得したいんだけどどうすればいいでしょう?
withで別で取得したリスト名Aとし取得結果がBだとすると
select ※ from X
where X.C IN (SELECT B FROM A)
で取得しようとしたんだが上手くいかずいろいろとぐぐってみたけどわからなかったです・・・

227NAME IS NULL2018/04/04(水) 21:48:51.99ID:tDmvnrOB
DB名も書けないとか

228NAME IS NULL2018/04/04(水) 22:51:56.44ID:???
withで別で取得したってのが意味わからん
その部分を含めてどうやろうとしたのか書けば答えようもあるが

229NAME IS NULL2018/04/04(水) 23:31:43.42ID:???
すみません。書き方が悪かったです。
使用しているのはoracleです。
with A AS (SELECT X FROM Z
GROUP BY X)
SELECT COUNT(※) FROM B
WHERE B.C IN(SELECT X FROM A)
のような文を書いてエラーとなりました。
イメージ的にはZテーブル上のXの数列についてBテーブルに何件存在するかを確認したいです。

23060改め神 ◆YDp73vGOso3d 2018/04/04(水) 23:59:17.52ID:???
参考書でも開けばそんくらいわかんだろゴミ
早くお前ら答えろや
スレチの質問には誘導して俺の質問には答えないって根性捻れまくりだろお前ら

231NAME IS NULL2018/04/05(木) 01:39:19.17ID:l3AE4+ue
「Xの数列」という説明が他人には理解できない。

Xがひとつの列だとするとなぜグループ化なのかわからない。

さらに再帰クエリにして、別のSELECT文のINリストのSELECT文にしているのも意図がくみにくい。

かなり単純なことを聞いていると予想はできるが、なぜこんなに難しく考えているのか?

232NAME IS NULL2018/04/05(木) 06:25:28.48ID:???
本当に>>229の通りに書いているならcount(※)がcount(*)の間違いだが
それ以外に致命的な間違いは見当たらない
まあこう書いても同じ意味にはなる
select count(*) from B inner join Z on B.C = Z.X;

233NAME IS NULL2018/04/05(木) 13:53:35.43ID:???
>>231
再帰クエリーないけど?

234NAME IS NULL2018/04/05(木) 19:22:56.90ID:l3AE4+ue
再帰のないWITHを再帰クエリと呼ぶなということか。

ただOracleは再帰があってもなくてもただWITHと書いて、再帰のないWITHと言ったりするからそう書いた。

標準SQLではWITH RECURSIVEと書かないといけないが、Oracleはたしかこの構文がない気がする。

235NAME IS NULL2018/04/05(木) 19:24:12.57ID:l3AE4+ue
他人のミスに厳しいならそう自己紹介してくれ。

236NAME IS NULL2018/04/05(木) 20:02:25.68ID:???
ではまずご自身からどうぞ

237NAME IS NULL2018/04/05(木) 20:52:54.79ID:???
やあ、俺

238NAME IS NULL2018/04/05(木) 21:29:58.31ID:???
>>232
B.CかZ.Xの少なくともどちらかがユニークでないと同じ意味にはならん

239NAME IS NULL2018/04/06(金) 00:33:07.86ID:GwnuWxH/
このスレはSQL入門スレなのかSQLオタクスレなのか?

よくわからない質問に、エスパー回答をするというIT技術者の間ではあまりないやりとりが多い。

240◆YDp73vGOso3d 2018/04/06(金) 01:28:52.77ID:???
テンプレ見ろゴミ
ここは初心者用スレだよ
なのに俺の質問は基礎的すぎるとかいう謎老人のおかげで誰も答えんのや
まじでゴミSEは右ならえの自我すら持たない穢多非人よ

241NAME IS NULL2018/04/06(金) 08:24:33.64ID:???
いつまで粘着してんだ、このキチは

242NAME IS NULL2018/04/06(金) 12:19:44.04ID:1nt8ANDW
>>239
IT技術者の間ではよくわからない質問によくわからない回答をして
お互い納得するのがデフォルトスタンダードですものねw

243NAME IS NULL2018/04/06(金) 12:43:29.95ID:???
ここはわざと言い間違えるスレか?

244NAME IS NULL2018/04/06(金) 12:58:57.72ID:GwnuWxH/
まず質問者が無礼。回答者がとりあえず想像で回答。これがこのスレが機能していない理由。

245NAME IS NULL2018/04/06(金) 13:59:04.00ID:GwnuWxH/
>>240
初心者向けであれば、SQLを回答するのではなく、何をしようとしているのを確認するのが先です。できればいい論をデータベース板で確認するのはおかしいので、プログラム板やプログラマ板で質問すべきです。

246◆YDp73vGOso3d 2018/04/06(金) 20:23:48.23ID:???
>>245
わかったわかったお前の意見とかどうでもいいわ
文体見るだけで中年のごみおっさんってわかるわやばいよ君?

247NAME IS NULL2018/04/06(金) 20:45:46.08ID:???
匿名の掲示板で誰でも書き込めるんだから
気に入らなければスルーすれば良いだけ
質問者が無礼って、お前に害悪を加えてきたわけじゃあるまいし

248NAME IS NULL2018/04/06(金) 21:22:42.32ID:+EV0F8Wd
助けてください。
ACCESSのDBなんですが、
tblAは、[id][なまえ][電話番号][性別][入会日]というフィールド構成のマスター名簿
tblBは、[id][入金日][入金額]というフィールド構成です。

このテーブルを元に、ACCESSやEXCELのVBA上で、

[id] [なまえ] idごとの[入金額]の合計 WHERE 昨日=<[入金日] <= 明日

というレコードセットを取得したいです。
tblBの集計に、tblAからもってきたなまえフィールドをくっつけたい、という感じです。
INNER JOINとか、そういうのを駆使して、なんとかひとつのSQL文を作りたいのですが、
うまくいきません。
どなたか、SQL文そのものをご教示ください。
お願いします。

249NAME IS NULL2018/04/06(金) 21:55:43.69ID:???
>>248
このままだとよくわからん
「誰が」入金したという情報はどこで管理しているの?

250NAME IS NULL2018/04/06(金) 22:00:07.59ID:+EV0F8Wd
>>249
すみません。idというのは、メンバーidのことです。レコードidではありません。
わかりづらくてすみません。

メンバー(マスターで、idから名前がわかる)による入金の記録がBテーブルです。
それぞれのメンバーが、合計でいくら入金したのか、を集計したいのですが、
Bテーブルにはidしかなく、集計表には名前も欲しいので、Aテーブルから持ってきたいのです。

251◆YDp73vGOso3d 2018/04/06(金) 22:08:41.64ID:???
>>250
君質問する以前の問題だよ?
あと今質問受け付けてないからばいばい

252NAME IS NULL2018/04/06(金) 22:09:44.34ID:???
>>250
えーと
同じ日に2件以上の入金はないということ?

253NAME IS NULL2018/04/06(金) 22:12:55.34ID:+EV0F8Wd
>>252
ありえます。
なので、SUM[金額] GROUP BY id としたいです。

254NAME IS NULL2018/04/06(金) 22:20:07.86ID:???
>>253
そもそもテーブル設計がまずいのでは
同じ人が同じ日に同じ金額を入金したらどうなるの?
主キーは?

255NAME IS NULL2018/04/06(金) 23:15:05.62ID:+EV0F8Wd
Bテーブルにはオートナンバーのridフィールドがあります。

256NAME IS NULL2018/04/07(土) 04:28:00.74ID:???
GROUP BY [id],[なまえ]

257NAME IS NULL2018/04/07(土) 09:47:12.83ID:???
>>248
Accessは知らんが一般的なSQLではこんな感じ

select A.id,
    A.なまえ,
    B.合計
from  tblA A
    inner join
    (select id,
        sum(入金額) as 合計
    from  tblB
    where  入金日 between 昨日 and 明日
    ) B
    on A.id = B.id
;

2582572018/04/07(土) 09:48:19.23ID:???
サブクエリ内にgroup by id書くの忘れた

259NAME IS NULL2018/04/07(土) 15:34:15.71ID:???
>>248
accessで作ってやったぞ
これでどうだ。

SELECT tblA.ID, tblA.[なまえ], Sum(tblB.入金額) AS 入金額の合計
FROM tblA INNER JOIN tblB ON tblA.ID = tblB.ID
WHERE (((tblB.入金日)>='2018-04-06' And (tblB.入金日)<='2018-04-08'))
GROUP BY tblA.ID, tblA.[なまえ]
ORDER BY tblA.ID;

260NAME IS NULL2018/04/07(土) 20:09:01.50ID:???
>>259
ありがとう!

261NAME IS NULL2018/04/10(火) 10:35:12.39ID:dRsp0g4C
【シオンの議定書は反日】 『マス・レジャーとクイズを盛んに』 『あなたは極めて優秀だから寝返れ』
http://rosie.5ch.net/test/read.cgi/liveplus/1523323225/l50

262NAME IS NULL2018/04/15(日) 00:36:03.26ID:???
>>4 のよくある質問2で、keyに別テーブル?配列?を指定することはできますか。
(key=3など、BDにない項目のカウント結果は当然ゼロになるが、それも結果として欲しい)

1〜12の数値(月)で集計するとか、47都道府県をキーとするとか、
ニーズはありそうなので方法もあるように思うのですが。

DBは、Google Fusion Tablesです。

263NAME IS NULL2018/04/15(日) 00:56:40.79ID:???
>>262
具体的にテーブルの内容を例示してみて

264NAME IS NULL2018/04/15(日) 01:11:20.64ID:???
outer joinのことを言いたいんだと思う

265NAME IS NULL2018/04/15(日) 01:41:28.73ID:???
OUTER JOIN? …慌ててググる…そうそうそれです!

Google Fusion TablesはWHERE句で関数が使えないなどSQLはやや貧弱なのですが、
OUTER JOINはあるようなので(LEFTだけ?)勉強してやってみます。
ありがとうございました。
https://developers.google.com/fusiontables/docs/v2/sql-reference

266◆YDp73vGOso3d 2018/04/15(日) 17:01:53.04ID:Bs6Qpy/T
おいおいおいおいouter joinとかいう初心者以前の質問には答えて
俺の質問には答えんのかい
お前らほんと捻くれてるな
これだからSEとかいうオタク共はいじめたくなるんだよなあ

267NAME IS NULL2018/04/15(日) 17:33:52.27ID:???
>>58
専門学生の宿題だろこれ?

268NAME IS NULL2018/04/19(木) 00:19:53.73ID:ACyU9sdk
>>266
答えられんのはプログラマーとかゆうコーダーだろ
SEとゆうのは俺様みたいな有能のことたぜボーイ!

269NAME IS NULL2018/04/19(木) 01:05:53.36ID:pgNamYVa
>>268
you?

270NAME IS NULL2018/04/20(金) 20:42:22.38ID:cUph+NAS
>>269
なんや?SE様に何か用か?

271NAME IS NULL2018/04/28(土) 20:00:00.97ID:???
テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど
この値がどのidなのか毎回自分でテーブル確認してinsertするのが大変で困ってます
リストボックスみたいなので'ゆうちょ'を選んだら(bank_id=)3みたいに支援してくれる機能ってSQLでできませんか?
RDBMSはMySQLでLinuxのターミナル使ってます

272NAME IS NULL2018/04/28(土) 21:05:32.03ID:???
それはSQLではなくWeb画面等使って選択させれば良いだろう

273NAME IS NULL2018/04/28(土) 21:36:58.41ID:f64A+t1T
>>271
SQLの話ではないな。

274NAME IS NULL2018/04/28(土) 22:38:37.03ID:???
ACCESSでも使ってろ

275NAME IS NULL2018/04/29(日) 03:58:48.45ID:uDICrjO7
>>271
IDを使わず銀行名でやってみてください。

自分が経験しなければ、なぜそうした方がいいのか、わかりませんよ。

276NAME IS NULL2018/04/29(日) 10:54:53.31ID:???
>テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど

それは分かってるっていうよりメリットデメリット理解しないまま鵜呑みにしてるだけだよね。
どうせ鵜呑みにするなら教科書通りのリレーショナルDB設計から入ればいいのに。

277NAME IS NULL2018/04/29(日) 11:08:37.04ID:???
更新時のレコード件数を減らしたり情報の集約・一元化がメリットですよね。ざっくりとは理解してるつもりです。
ただターミナルからSQLで複数のレコードを追加するには自力でテーブル確認する必要あるのが使いづらいなと思って

278NAME IS NULL2018/04/29(日) 11:34:58.17ID:???
select bank_id from m_bank where bank_name = ’ゆうちょ’

こんなサブクェリーを追加SQLに埋め込む

279NAME IS NULL2018/04/29(日) 12:34:02.47ID:???
>>278
こういうときに副問合せ使うんですね、使いやすそうで凄く良さそう。
早速使ってみます。
ありがとうございます。

280NAME IS NULL2018/04/29(日) 13:38:14.58ID:uDICrjO7
マスタテーブルではないのか?

281NAME IS NULL2018/04/29(日) 14:23:08.00ID:???
>複数のレコードを追加するには自力でテーブル確認する必要ある

これの意味が判らん

282NAME IS NULL2018/04/29(日) 18:36:41.80ID:???
説明下手ですみません。
初心者なのですごく初歩的な質問でした。
取り敢えずサブクエリで解決しましたが一応

habook:
id, money, method_id
...
135, -5000, 58
...

method:
method_id, method_name
...
58, 'ゆうちょ銀行'
...

INSERT INTO habook VALUES (200, -1000, ???)
method_idが多くてゆうちょ銀行のidがパッと思い出せなくて詰まる
methodテーブルを自分で確認してソニー銀行のidを調べてinsertに打ち込む

同じような感じで外部キーの列が増えるとインサートする度に自分で調べる必要があって大変になってきたのでなにかいい方法ないか聞きました。


混乱させてすみません。

283NAME IS NULL2018/04/29(日) 18:57:21.95ID:???
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?

284NAME IS NULL2018/04/29(日) 19:30:40.63ID:???
学校の宿題みたいな設問だな

285NAME IS NULL2018/04/29(日) 19:48:09.61ID:i1PXJR4v
>>282
自分でそういうプログラムを作ればいい。

286NAME IS NULL2018/04/29(日) 19:49:09.41ID:i1PXJR4v
>>284
トランザクションデータをトランと略しているあたりから、どこかの会社だろう。

287NAME IS NULL2018/04/29(日) 19:49:26.43ID:ccXAu8y/
同姓同名には考慮しなくて良いの?

288NAME IS NULL2018/04/29(日) 19:51:35.86ID:i1PXJR4v
>>283
外部キーが社員番号ではなくて名前なのはネタだからか?

289NAME IS NULL2018/04/29(日) 22:10:20.38ID:???
>>282
どのぐらいの頻度でSQL使うかわからんけど、こんなのでもいいんかね
insert into habook(id, money, method_id)
select 200, -1000, method_id from method where method_name='ゆうちょ銀行'

290NAME IS NULL2018/04/29(日) 22:12:28.42ID:???
>>283
>>58と同じみたいなんだが、いまだにわからないのかw

291NAME IS NULL2018/04/29(日) 22:15:33.56ID:???
銀行は銀行名の変更とか合併とかあるから
そういった事も考えないといけない

292◆YDp73vGOso3d 2018/04/30(月) 03:17:07.21ID:???
お前らはどうしても俺の質問には答えたくないみたいだな

293NAME IS NULL2018/04/30(月) 08:36:43.41ID:???
頼み方ってものがあるだろ
ほら言ってみろ

294NAME IS NULL2018/04/30(月) 10:55:57.85ID:FupcYnE7
コメントが一杯付いてて良かったじゃないか

295NAME IS NULL2018/04/30(月) 14:55:41.60ID:???
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?

296NAME IS NULL2018/04/30(月) 14:57:09.24ID:???
>>295
同じ名前の社員がいたとき、どうすれば良いの?

297NAME IS NULL2018/04/30(月) 15:03:04.31ID:???
結婚とか離婚して姓名変わったらどうすんだ

298NAME IS NULL2018/04/30(月) 17:56:27.86ID:???
もうここしか頼るところがございません。
SQL server7.0が、綺麗にwin10のPCだけつながらなくなりました。
「接続できませんでした。 SQL state'ST100'
SQL server エラー0
[microsoft][ODBC SQL server driver] ログインが時間切れになりました」
と出ます。どうすればいいのでしょうか

299NAME IS NULL2018/04/30(月) 18:22:54.57ID:???
>>298
20年前の製品とか捨てちまえ

300NAME IS NULL2018/04/30(月) 18:35:50.58ID:???
>>296
>>297
それぐらい自分で考えろ

301NAME IS NULL2018/04/30(月) 19:16:11.68ID:L8ngFuqq
>>298
ああこれはログインが時間切れになってるね
ログインが時間切れにならないように注意しなよ

302NAME IS NULL2018/05/01(火) 08:40:04.60ID:???
>>298

なんでこの板まで来て

Microsoft SQL Server 総合スレ 11 [無断転載禁止]&#169;2ch.net
https://mevius.5ch.net/test/read.cgi/db/1464508208/

に行かないの?

303NAME IS NULL2018/05/04(金) 20:14:40.86ID:???
外部キーって必ず他のテーブルの主キーじゃないとダメなの?

304NAME IS NULL2018/05/04(金) 21:31:51.25ID:???
主キーでなくてもUNIQUE制約がついていれば大丈夫だと思う

305NAME IS NULL2018/05/04(金) 22:29:19.11ID:GLAEl09j
>>303
>>304
これ自分も知りたいからageてみるか

306NAME IS NULL2018/05/05(土) 00:10:26.39ID:T65X27xi
>>303
一意制約の列でもよい。要は重複値を持っている列では外部キー制約に使用できない。

3073032018/05/05(土) 01:36:42.07ID:dfGZW7dT
>>304
>>306
ありがとうございますm(_ _)m

308NAME IS NULL2018/05/10(木) 23:54:50.05ID:???
DB殆ど触ったことないので分からないのですが、
1. SQLでは[ユーザー名, パスワード, [データA], [データB]] (便宜的にリスト形式にしています)
のようなDB構造は作れるのでしょうか?

つまり、ユーザー名とパスワードは1ユーザに1つずつ、データA,B,C、、、は内部に複数のデータを持つような構造です
ちなみに扱いたいSQLはpostgreSQLです

2. node.jsとpostgreSQLを使ってウェブアプリを作ろうと思っているのですが、postgreSQLでは最初にDB構造の宣言などはしなくて良いのでしょうか?

Swift + RealmでDBを使った際には、ユーザーモデルっていうDB構造?を宣言してから使ったので、少々混乱しています

3. node.jsとpostgreSQL(npmで)をWindowsにインストールしたのですが、postgreSQLが動きませんでした
WindowsにもpostgreSQLをインストールしなければいけないのでしょうか?


よろしくお願いします

309NAME IS NULL2018/05/11(金) 03:50:27.46ID:JrURJydT
MySQLです。数値を計算するSQL文ってあるでしょうか?

例えば、rankingテーブルに「access」と「click」というカラムがあるとします。
accessは×1でclickは×5にして、その合計数値が多い値(降順)で表示

みたいなことがしたいです。

310NAME IS NULL2018/05/11(金) 05:53:20.74ID:6wqBIw87
>>308
まずはDBを触りましょう
SQLではと書いているということは他ならわかるのでしょうか
RDBでは一般的に
[ユーザーID,ユーザー名,パスワード]
[ユーザーID,データ番号,データ]
のようなテーブルを作成してユーザーIDで結合します
これを正規化といいます

>>309
素直に
order by (ranking.access + ranking.click * 5) desc
でいけるかと

311NAME IS NULL2018/05/11(金) 17:09:15.29ID:???
SQL初心者です。
連続して1が立っている時間
(行数、データ数)は求められないでしょうか。
1が出てきたタイミングで後どれだけ続くかをその行に書き込みたいです。

312NAME IS NULL2018/05/11(金) 21:47:33.52ID:???
>>310
いけました!orderに計算するって概念がありませんでした。
とても勉強になりました。ありがとうございます

313NAME IS NULL2018/05/12(土) 09:16:12.16ID:???
>>311
どういうテーブル、イメージしてるデータの並びを書かないとレスつかないんじゃないか

314NAME IS NULL2018/05/12(土) 20:19:54.53ID:???
>>313
ありがとうございます。

A B
0 0
0 0
1 3
1 0
1 0
0 0
0 0

AからBを作りたいです。
Bの3は1が3つ続いていることを意味します。

315NAME IS NULL2018/05/12(土) 21:14:06.97ID:???
>>314
順序も規定せずに 「続いてる」とか言われてもなあ
Excel + VBA とかでやれば?

316NAME IS NULL2018/05/12(土) 21:22:35.67ID:???
>>314
連番がなければsql では無理

317NAME IS NULL2018/05/12(土) 21:39:12.17ID:???
>>315
>>316
No A B
0 0 0
1 0 0
2 1 3
3 1 0
4 1 0
5 0 0
6 0 0
7 1 2
8 1 0
9 0 0

例えばこの様な連番が有れば出来るものでしょうか。

すみません。
SQLで出来るのか?
出来るならどのような方法が有るのか
知りたいです。

よろしくお願いします。

318NAME IS NULL2018/05/12(土) 22:16:46.98ID:???
>>317
これで
2 1 3
7 1 2
がとれたらいいわけ?
時間っていってたわりにはそういう結果をかいてないが

319NAME IS NULL2018/05/12(土) 22:19:25.26ID:???
あとDBは何かしりたい

320NAME IS NULL2018/05/12(土) 22:28:15.77ID:???
最新の(つまりinsertする前の)NoでAが1で、かつ追加するデータのAが0だったら
直前のAが0のデータのNoを見る
例ならNoが9の時に0になったから直前のAが0のデータはNoが6だと。
んで、7,8が連続したものだった
だからNo7のBに2をセット

こんな感じ?

321NAME IS NULL2018/05/12(土) 23:17:44.19ID:???
>>318
分かりにくく申し訳ありません。
元々時系列のデータだったので
時間という書き方をしていました。
(何個続いたか知りたいのです)

NOとAの項目がある状態でBの項目
を追加したいと思っています。

318様のような結果でも構いません。

>>319
MSのSQL Serverです。申し訳ありませんが詳細なバージョンなどは不明です。

>>320
ありがとうございます。
書かれているようなことが
実現できればと思います。

322NAME IS NULL2018/05/12(土) 23:18:49.98ID:???
>>317
SQL文でやるならレコードを次々と参照しないといけないから再帰SQL使わないとだめだろうな
あるいはプロシージャでカーソル使う
あるいはプログラムでやる感じになる

323NAME IS NULL2018/05/13(日) 00:03:02.98ID:???
SQL Serverでなく、MySQLです、済みません。テーブル名はtと仮定しました。

create procedure setB()
begin
 declare done int;
 declare _flag int;
 declare _cnt int;
 declare _a int;
 declare _no int;

 declare cur cursor for select No,A from t order by No desc;
 declare exit handler for not found set done = 0;
 set done = 1;
 set _flag = 0;
 set _cnt = 0;
 
 open cur;
 while done do
  fetch cur into _no, _a;
  if _a = 1 and _no > 0 then
   update t set b = 0 where No = _no + 1;
   set _cnt = _cnt + 1;
  else
   update t set b = _cnt where No = _no + 1;
   set _cnt = 0;
  end if;
 end while;

 if _a = 1 then
  update t set b = 0 where No = _no;
 else
  update t set b = _cnt where No = _no;
 end if;
 close cur;
end;

324NAME IS NULL2018/05/13(日) 05:37:55.80ID:???
>>322
ありがとうございます。
教えていただいたキーワードをもとに
調べてみます。

>>323
ありがとうございます。
今はPCをさわれる環境にないので月曜日に試してみたいと思います。

325NAME IS NULL2018/05/13(日) 07:21:58.29ID:???
>>322
再帰やストアドなんて要らんでしょ
>>318 の結果を得たいだけなら

select
 T1.NO, T1.A,
 (
  select min(T3.NO) as NO
  from T as T3
  where T1.NO < T3.NO and T1.A <> T3.A
 ) - T1.NO as [連続数]
from T as T1
inner join T as T2 on T1.NO - 1 = T2.NO and T1.a <> T2.a
where T1.A = 1

で十分でしょ (わかると思うけど表名は T ね)

326NAME IS NULL2018/05/13(日) 09:51:48.44ID:???
>>325
ありがとうございます。
試してみます。

327NAME IS NULL2018/05/13(日) 11:09:02.63ID:???
再帰SQLでやるならこんな感じ
最初に1がでたところで表示したいとのことなので
レコードの最後から加算積み上げてる
半角でレスしようとしたらインジョクションかなんかでエラーになった
ため全角に変換してます

WITH CTE AS (
SELECT NO,A,A AS B 
FROM TBL AS M

UNION ALL 
SELECT M.NO ,M.A ,S.B + 1 AS B −−Bを1で積上げていく
FROM TBL AS M
inner join CTE AS S
on  M.NO = S.NO −1 −−レコードの後ろから参照
and S.A = 1
and M.A = 1

), [WK1] AS (
SELECT NO,A,max(B) as B −−Bが積上開始位置により別々の数字になっているので最大値でサマリー
FROM CTE AS M
GROUP BY NO,A


SELECT M.NO,M.A,case when S.A = 0 then B else 0 end B −−前のレコードがゼロの時のみBを表示
FROM [WK1] AS M
LEFT JOIN TBL AS S
on M.NO −1 = S.NO 
ORDER BY M.NO

328NAME IS NULL2018/05/14(月) 10:07:01.26ID:???
>>325
>>327
ありがとうございます。どちらも思ったような結果が得られました。
>>323
ありがとうございます。
今回は動かせていませんが、MySQLをさわる機会に試してみます。

4月末よりSQLを使わなければいけなくなり、困っていました。
皆さんに教えていただいた方法を理解し自由にSQLが書けるよう頑張ります!

329NAME IS NULL2018/05/17(木) 11:36:55.43ID:???
教えて下さい。

下記の表Tに於いて
NO,START,STOPが与えられているとき
KEKKAという行を得たいです。
良い方法があれば教えてください。
(STARTからSTOPの間に1を立てたい)
DBはMicrosoft SQL Serverです。

NO START STOP KEKKA
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 1
5 0 0 1
6 0 1 1
7 0 0 0
8 0 0 0

よろしくお願いします。

330NAME IS NULL2018/05/17(木) 15:57:54.69ID:???
>KEKKAという行を得たい

????????

331NAME IS NULL2018/05/17(木) 16:33:50.08ID:???
>>330
わかりにくくてすみません。
KEKKAという項目は元のデータにはなく、この項目を生成したいです。

332NAME IS NULL2018/05/17(木) 19:41:40.74ID:???
STARTとSTOPは1件ずつしかないのか?

順序はNO順でいいのか?
NOは連番なのか?

333NAME IS NULL2018/05/17(木) 22:05:10.46ID:???
START、STOPは必ず1レコードあり、複数はない
って事なら、簡単なSQLで処理できそう

334NAME IS NULL2018/05/17(木) 22:12:42.54ID:???
>>332
STARTとSTOPは複数あります。
NO順です。
NOは連番です。
STARTが1である行とSTOPが1である行は必ず交互に来て、
STARTとSTOPが同時に来ることはありません。
STARTが1の行とSTOPが1の行は続くことがあります。
STOPが1の行の直後にSTARTが1の行が来る場合もあります。
STARTが1の行の数とSTOPが1の行の数は同じです。
NO順に先頭から見ていくと、STARTが1の行は、STOPが1の行より先に出現します。

よろしくお願いします。

335NAME IS NULL2018/05/17(木) 22:21:17.05ID:???
>>334 で何をやりたいかはだいたいわかったけど
(たぶん STARTしてからSTOPするまで KEKKAを1にすればよいはず)
行順を保持しつつ状態遷移させるのって普通のSQLでできるのだろうか?

336NAME IS NULL2018/05/17(木) 22:27:50.57ID:???
START、START、STOP、STOPって並びになったときはどうすんの?

337NAME IS NULL2018/05/17(木) 22:28:51.14ID:???
334見てなかった、すまん

338NAME IS NULL2018/05/17(木) 22:51:31.55ID:???
>>334
スタートがあったら1加算ストップがあったら1減算する累積計算すればいいじゃねえ
select no sum( start + end * -1) as kekka from t as m
left join t as s
on t.no<=m.no
group by no

339NAME IS NULL2018/05/18(金) 01:30:58.99ID:???
>>338
いろいろ細かいミスは置いといて、それSTOPの行が1にならんだろ

>>329
select NO,START,STOP,
(select isnull(sum(START),0) from t where t.NO <= m.NO)-
(select isnull(sum(STOP),0) from t where t.NO < m.NO) KEKKA
from t m
とかで出来んじゃね

340NAME IS NULL2018/05/18(金) 10:08:58.76ID:???
ありがとうございます。
皆さんに教えていただいた方法を試していますが、うまく行きそうです。
ありがとうございました。

341NAME IS NULL2018/05/18(金) 17:13:55.57ID:???
・DBMS名とバージョン
10.1.16-MariaDB

・テーブルデータ
テーブル:categories
cateid  catename   
----------------
1     c1
2     c2
3     c3
4     c4
5     c5
6     c6
7     c7
8     c8

テーブル:books
cateid  bookname price
--------------------
1     b11     20
1     b12     10
1     b13     30
1     b14     40
1     b15     5
2     b21     20
2     b22     10
2     b23     30
2     b24     40
2     b25     5


・欲しい結果
cateid   catename bookname price
--------------------------------
1     c1      b14     40
1     c1      b13     30
1     c1      b11     20
2     c2      b24     40
2     c2      b23     30
2     c2      b21     20

・説明
categoriesとbooksをcateidで結合。結合の順番はbooksのpriceの降順とし、更にその結合する数の上限を3としたいのですが、どういうSQLになりますか?

ちなみに↓のようなSQLを思いつきましたが上手く行かず・・・
SELECT *
FROM categories
    LEFT JOIN (SELECT * FROM books ORDER BY price DESC LIMIT 3) books
    ON (books.cateid = categories.cateid)
priceでのソートはできてるんですが、LIMITが期待通りには機能しませんでした
まあそれもそのはず・・・これではbooksテーブル全件の上位3件を拾ってこいというクエリですからね

342NAME IS NULL2018/05/18(金) 21:21:55.34ID:???
select
 t1.cateid, catename, t1.bookname, t1.price
from books t1
join category c on c.cateid=t1.cateid
where 3 >= (
 select count(*)
 from books t2
 where
  t1.cateid = t2.cateid and
  t1.price <= t2.price
)
order by cateid, price desc;

343NAME IS NULL2018/05/20(日) 02:31:03.55ID:???
>>342
できました!ありがとうございます!

新着レスの表示
レスを投稿する