アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

複雑な条件でGROUP BYする

MySQLを前提として書いています


下記Aのテーブルについて、
「idが4未満と4以上のグループに分けて、それぞれで一番小さいvalueをSELECT」
してBの結果が欲しいとき…

(A)test_table

id value
1 68
2 15
3 32
4 19
5 73
6 59

(B)

15
19

苦し紛れに以下のようなクエリを書いてみたら成功しました。

SELECT
  MIN(`value`) AS `min_value`
FROM
  `test_table`
GROUP BY
  `id` < 4
 ,`id` >= 4

GROUP句には条件式も使えるんですねー。
(ORDER句でも使えるのを知ってて思いついただけなので、それ実はダメだよ!みたいなの知ってる方いらっしゃいましたらこっそり教えてください…)

もちろん複数フィールドを使った条件式や、
等号不等号に限らず、IN等も使えます。
ちなみにGROUP句部分を下記のようにした場合、

GROUP BY
  `id` = 1
 ,`id` IN (2,3)

結果はこうなります。

68
15
19

条件から漏れたレコードについては勝手にまとめられるようですね。
使い方に応じて、不要なものはWHERE句できちんと省くとか、もしくはGROUP句での指定で漏れないようにするとか、きちんと考えて書かないとヘンな不具合の原因になりそうです。

Excelでよく使うショートカットキー

Excelのショートカットキーのうち、個人的によく使うものやすっかり忘れてたけどそういや便利だったわと思ったものをメモ。

自動入力系

ものすごく便利。
意外と知られていないのですがおすすめ。

  • 「Ctrl」+「D」上のセルのコピー(クリップボード非使用)
  • 「Ctrl」+「R」左のセルのコピー(クリップボード非使用)
  • 「Ctrl」+「;」今日の日付
  • 「Ctrl」+「:」現在の時刻

セル操作・参照系

  • 「Ctrl」+「+」セルの挿入
  • 「Ctrl」+「-」セルの削除
  • 「F2」選択しているセルの編集

シート操作・参照系

  • 「Ctrl」+「PageDown」次のシート
  • 「Ctrl」+「PageUp」前のシート
  • 「Shift」+「F11」シートの挿入

マクロ系

  • 「Alt」+「F8」マクロダイアログの表示
  • 「Alt」+「F11]VBEの起動

特定の文字以降を別の文字列に置き換える

具体的には、「メールアドレスの@以降を*でマスクする」ロジック。
文字列処理の関数を多数使用できて面白かったのでメモ。
ただ、PHPならもっと簡単なロジックが作れそうな気も…?

// 加工前のメールアドレス
$mail_address = "hoge@fuga.com";

// 加工後のメールアドレス
// (表示すると「hoge@*********」になる)
$masked_mail_address = substr($mail_address, 0, strpos($mail_address, '@') + 1) . str_repeat('*', strlen(strstr($mail_address, '@')));


使用している関数(リンク先は公式マニュアル)

  • strpos:文字列の検索
  • strlen:文字数の長さを求める
  • strstr:文字列の切り出し
  • substr:文字列の切り出し
  • str_repeat:文字列を繰り返す

データベースごとのサイズを調べる方法

MySQLを前提として書いています


データ部分、インデックス部分、合計について、それぞれMG単位とGB単位。

SELECT
  `TABLE_SCHEMA`
 ,ROUND(SUM(`DATA_LENGTH`) / 1024 / 1024, 2) AS `data_MB`
 ,ROUND(SUM(`DATA_LENGTH`) / 1024 / 1024 / 1024, 2) AS `data_GB`
 ,ROUND(SUM(`INDEX_LENGTH`) / 1024 / 1024, 2) AS `index_MB`
 ,ROUND(SUM(`INDEX_LENGTH`) / 1024 / 1024 / 1024, 2) AS `index_GB`
 ,ROUND(SUM(`DATA_LENGTH` + `INDEX_LENGTH`) / 1024 / 1024, 2) AS `all_MB`
 ,ROUND(SUM(`DATA_LENGTH` + `INDEX_LENGTH`) / 1024 / 1024 / 1024, 2) AS `all_GB`
FROM
  `information_schema`.`TABLES`
GROUP BY
  `TABLE_SCHEMA`
ORDER BY
  `TABLE_SCHEMA`

テーブルサイズの調べ方はこちら。
honey8823.hateblo.jp

終わりの始まり

ある日突然社長から全社員に対して「会社の経営状況が悪化している。近日個人面談を行う」と告知。

前から宜しくはなかったのは知ってたけど、わざわざ明言しなければならなくなったというのはおそらく相当ヤバい状況になったんだと思う。
とはいえ別にみんな驚きもしてなかった。「ついにwwwきたかwww」て感じですらあったかもしれない。
※あからさまな前触れとしては、その少し前に計画されていた社員旅行が出発一週間前になって取り止めになっていた


上層部と各部署リーダーの打ち合わせでは
「個人面談で一部社員に対しては解雇、その他社員には給与一律引き下げの告知を行う。面談まではそのことは口外禁止」
という話になっていたらしいのですが、
各部署リーダーたちの独断で「それはあまりにも卑怯、こっそりみんなに伝えておこう」ということになったらしく、我々も事前にある程度知ることに。
そういう判断しちゃうリーダーたちマジかっこいい。
財政悪化からの個人面談という時点でリストラは察してましたけど、まさか給与引き下げまであるとは。

リーダー「…ということを個人面談で言われると思う」
全員「( ゚д゚)…」
リーダー「給料2割減らされるなら辞めるって人挙手」
全員「( ゚д゚)…」
リーダー「じゃあ悩むなーって人挙手」
ぼく「( ゚ω゚)ノ ハイッ」
全員「( ゚д゚)!」

いや悩むよ。
給料減らすよと言われたらいくらなんでも悩むよ。
会社に残りますとは断言しがたいよ。

ざっと計算すると、15%以上減ると入社時の給与を下回ることになりますし。
趣味を仕事にしたクチではありますが、趣味で仕事やってるわけではないですし。

つーか社長自ら経営状況の悪化を明言する時点で「あ、とりあえず脱出経路だけ確保しとこ」と思いはしましたしね。


まあそんなこんなで面談を迎えたんですが、
状況の説明を受けたのち(リストラされる大まかな人数とか、給与の引き下げ額とか)質問ありますかと言われたので
「現在赤字のプロジェクトをどうする予定ですか」と聞いたんですよ。
答えは「人員削減して、あとは場合によっては他社への売却」。
…うーん…
人件費を払うのが難しくなってきているというレベルである現状からすると、それじゃあジリ貧というか、立て直せるという域に至らないのでは…??と感じる微妙な返答。
できるできないは仮に置いとくとしても、利益を上げるのに全力を尽くす方向の回答を聞きたかった。
もしくは、削るなら削るでもっと極限まで、利益が上がってるプロジェクトを上位からいくつか残すだけにして、最低限の運用人数だけ確保するとか。
(その場合はおそらくわたしもクビだが、まあそれはそれで)
もうちょっと直球で「どうやって立て直すおつもりですか」と聞けばよかったかな。

「じゃあ辞めたいです」とその場で言うほどではなかったけど(給与も一応入社時よりマシなレベルに落ち着いた)
「あ、これは沈む船だな、よほど奇跡的な回復をしない限りおそらく半年以内に辞めるな」と感じる面談でした。
話を聞いた感じでは、人件費を削減&各プロジェクトを縮小稼働し、落ちついたら売上を上げる方向に持って行こう、くらいの計画なのかなと思いますが、それだとたぶん回復よりも会社がつぶれる方が早い。
(わたしが開発担当したプロジェクトのうち特に人件費が大きかったやつも縮小稼働になりますが、来年2月から順次縮小とか悠長なこと言ってる時点でアレ)
この状況になったということはギリギリまで銀行などから借金してるんじゃないかなと思いますが、そうだとしたら借金も返していかなきゃいけないし。

今回リストラされなかった人たちの中にも転職を考えてる人はそこそこいるかもしれないし、退職者が続出して崩壊…というオチになる気がする。
崩壊寸前に脱出できたらベストかな。

駅メモ #15:ふたりめのカンスト

れいこさんに続き、いずなさんがカンスト

f:id:honey8823:20161031141659p:plain:w400

あと、れいこさんはマイルも最大値になりました。
マイル込みの最終パラメータがこちら。
f:id:honey8823:20161031141712p:plain:w400

相変わらずれいこさんのお仕事回数称号一番乗りを目指しているのですが、回数稼ぎは激戦駅に居座るときとか、移動中にしても非日新駅でなんとかって感じかな…。マイルも経験値ももったいないし…。


進捗は今日時点でこんな感じ。

f:id:honey8823:20161031142420p:plain:w400

前回(10/14)からの比較

  • 駅 2778 → 2935(+157)
  • 路線 339 → 371(+32)
  • 都道府県 30 → 30
  • コンプ路線 156 → 170(+14)

関西に行く用事があったのでちょっと回収してこれました。


所持でんことLv ()内は前回比 ☆は凸完了、★はカンスト

[S]セリア 8/75
[A]メロ 30/70
[D]ルナ 59/80 (Lv14up) ☆
[T]みろく 8/70 (Lv1up)
[S]レイカ 16/65
[T]シャルロッテ 60/60
[T]シーナ 7/70 (上限5up)
[A]さや 10/65 (Lv2up / 上限5up)
[S]もえ 71/80 (Lv10up) ☆
[T]いろは 33/55 (上限5up)
[D]しいら 11/70 (Lv3up)
[D]もぼ 10/60
[D]いずな 80/80 (Lv5up / 上限5up) ★
[S]ふぶ 65/65 (Lv5up)
[A]りんご 45/80 (Lv9up) ☆
[T]ニャッシュ 15/80 ☆
[T]ダッチュー 50/50
[T]いちほ 39/80 (上限5up) ☆
[A]イムラ 50/65
[T]にころ 54/55
[S]しぐれ 7/65 (上限5up)
[A]レン 8/80 ☆
[T]みらい 10/65 (上限10up)
[D]ベアトリス 9/60
[S]うらら 31/60 (上限5up)
[A]ほこね 9/75 (上限5up)
[T]やちよ 15/75 (上限5up)
[A]リオナ 7/60
[T]チコ 18/55
[A]レーノ 7/80 (上限5up) ☆
[D]ありす 70/75
[T]コタン 24/80 ☆
[T]エリア 18/55 (上限5up)
[S]ひいる 15/80 ☆
[D]いおり 14/80 ☆
[S]ミオ 6/65 (上限10up)
[S]みこと 23/65 (上限5up)
[D]くに 6/55
[T]るる 15/80 ☆
[A]ハル 8/55
[D]にちな 9/60
[A]そら 8/75
[S]アサ 65/70 (上限5up)
[A]さいか 13/55
[S]カノン 1/50 (new)
[S]スピカ 1/50 (new)
[D]メイ 1/50 (new)
[A]Liko 6/75
[D]れいこ 80/80 ★
[T]ハッカ3号 1/50 (new)

  • 上限突破完了
    • ニャッシュ
    • りんご
    • コタン
    • もえ
    • いおり
    • ルナ
    • ひいる
    • (れいこ)
    • るる
    • レン
    • レーノ
    • いちほ
    • (いずな)
  • カンスト
    • (れいこ)
    • いずな
  • グランクラス
    • れいこ


自分用育成メモ:

方向性を変えて、サポーターを優先的に育てていこうかなと。
その中でも元々優先度高かったふぶ・アサはやっぱり最優先。

リンクスコア狙いは ふぶ>アサ>もえ>うらら
新駅ボーナス狙いは スピカ>しぐれ>みこと>カノン>レイカ

そしてやっぱりマイルや経験値に影響の出にくいところでれいこさんの回数稼ぎをしていきたい。

駅メモ #14:はじめてのカンスト

れいこさんカンストしました。
Lv80カンストは初です。

f:id:honey8823:20161014171040p:plain:w400

また、先日「笑顔がまぶしくて」称号も一番乗りでゲットしました。

f:id:honey8823:20161014171049p:plain:w400

アクティヴレイドコラボはこれからラストスパート遠征してきます。


進捗は前回から変わらず。

  • 駅 2778
  • 路線 339
  • 都道府県 30
  • コンプ路線 156


所持でんことLv ()内は前回比 ☆は凸完了、★はカンスト

[S]セリア 8/75
[A]メロ 30/70 (上限5up)
[D]ルナ 45/80 (Lv4up) ☆
[T]みろく 7/70 (上限5up)
[S]レイカ 16/65 (上限5up)
[T]シャルロッテ 60/60 (Lv1up)
[T]シーナ 7/65
[A]さや 8/60
[S]もえ 61/80 ☆
[T]いろは 33/50
[D]しいら 8/70 (上限5up)
[D]もぼ 10/60 (上限5up)
[D]いずな 75/75
[S]ふぶ 60/65 (上限5up)
[A]りんご 36/80 ☆
[T]ニャッシュ 15/80 ☆
[T]ダッチュー 50/50
[T]いちほ 39/75
[A]イムラ 50/65 (上限5up)
[T]にころ 54/55
[S]しぐれ 7/60
[A]レン 8/80 (上限5up) ☆
[T]みらい 10/55
[D]ベアトリス 9/60
[S]うらら 31/55
[A]ほこね 9/70 (上限5up)
[T]やちよ 15/70
[A]リオナ 7/60 (上限5up)
[T]チコ 18/55
[A]レーノ 7/75 (上限5up)
[D]ありす 70/75 (上限5up)
[T]コタン 24/80 ☆
[T]エリア 18/50
[S]ひいる 15/80 ☆
[D]いおり 14/80 ☆
[S]ミオ 6/55
[S]みこと 23/60 (Lv1up)
[D]くに 6/55
[T]るる 15/80 (上限5up) ☆
[A]ハル 8/55
[D]にちな 9/60
[A]そら 8/75
[S]アサ 65/65
[A]さいか 13/55
[A]Liko 6/75
[D]れいこ 80/80 (Lv22up) ★

  • 上限突破完了
    • ニャッシュ
    • りんご
    • コタン
    • もえ
    • いおり
    • ルナ
    • ひいる
    • (れいこ)
    • るる
    • レン
  • カンスト
    • れいこ

るるとレンも上限突破完了。


自分用育成メモ:

ついにれいこさんカンストしてしまい、目標だったお仕事回数3000回の一番乗りも達成したのですが
グランクラス(マイルカンスト)とお仕事回数5000回の一番乗りを目指して、通勤時なんかに使っていこうかと思います。
どこかに居座るときは、後回しにしていたふぶさん&ありすを再び仮カンストするまで使っていきます。
二人も終わったらもえさんだな。
新駅ボーナスは相変わらず ルナ>りんご>いちほ>うらら>メロ かな。(Lv50まで上げたい)
さらに気が向いたらみこと・ひいるあたり。(とりあえずLv30まで)

ユニークなインデックスが存在しないテーブルを求める

MySQLを前提として書いています


先日弊社のphpMyAdminを3.x系から4.x系にアップデートしまして
「PRIMARY/UNIQUEのいずれのインデックスも張られていないテーブルのレコードは編集/削除不可」という問題まっとうな仕様変更にぶち当たったので、
そのとき影響範囲の調査に使った
「PRIMARY/UNIQUEのいずれのインデックスも張られていないテーブル一覧」を求めるクエリをメモ。

…ピンポイントすぎてもう使わない気がしなくもないですが、「○○なテーブル一覧」レベルであれば出すこともありそうなので、参考として、一応。

SELECT    `TABLES`.`TABLE_NAME`, `COLUMNS`.`COLUMN_KEY`
FROM      `information_schema`.`TABLES`
LEFT JOIN `information_schema`.`COLUMNS`
  ON      `TABLES`.`TABLE_NAME` = `COLUMNS`.`TABLE_NAME`
  AND     `COLUMNS`.`COLUMN_KEY` IN ('UNI', 'PRI')
WHERE     `TABLES`.`TABLE_SCHEMA` = '【データベース名】'
  AND     `COLUMNS`.`COLUMN_KEY` IS NULL
GROUP BY  `TABLES`.`TABLE_NAME`

ユニークキーが存在しないテーブルっていう仕様がそもそもだめなのでは、というアレ

Ingress倉敷ミッションデイに参加してきました

倉敷駅からさっくりクリアできる6つを選んでやってきました。通し番号としては1~6を順にですね。
f:id:honey8823:20160928130425p:plain

時々、無関係と思ってハックした直後のポータルが指定されて手間取ったりはしました…。
ミッションデイ当日だと焼き合いもすごいのでヒートシンク刺す隙すらなかったりして。

これでミッションデイは3回目の参加。メダルが銀になるのが楽しみ。

ingressミッションレビュー:ViaLux : Setouchi , JP

ViaLux参加記念に。
f:id:honey8823:20160928125439p:plain

https://ingressmm.com/?find=ViaLux%20%3A%20Setouchi%20%2C%20JP

ミッションとは関係ないのですが、最後のmeasurementが終わった直後のfactionチャット。
とてもすき。
f:id:honey8823:20160928125919p:plain:w400
普段から挨拶とか応答とか掛け声的な感じで「えんらーい」を見ることはありますが、こんなに並ぶの初めて見た。
ところでRESはこういう「ウェーイ」みたいなのを何て言うんだろう…?