SQLのFROM句はテーブルである必要はございません!
どうもそのように思っている方が多い気がしたので。
FROM句に指定できるのはテーブルそのものではなく、SELECT文を発行した結果でも指定できます。派生テーブルという表現をすることが多いみたい。
PostgreSQLのマニュアルでもそんなような事が書いてあります。
FROM句は、カンマで分けられたテーブル参照リストで与えられる1つ以上のテーブルから、1つのテーブルを派生します。
テーブル参照は、テーブル名(スキーマで修飾することもできます)、副問い合わせによる派生テーブル、結合の組み立て、またはこれらの複雑な組み合わせからなります。
https://www.postgresql.jp/document/9.5/html/queries-table-expressions.html#queries-from
派生テーブルの例
こんなやつ。from句でテーブルではなくSQLの選択結果をFROMに入れています。
select * from ( select id, user_id, access_path, created from logs where year(created) = 2015 order by id desc ) as tmp_table group by user_id
オヌヌメ本
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
Pythonでdictを比較してassertしたい
単体テストのコードを書いていて、そういう局面にぶち当たりました。
結論から言うとこれでOKです。
assert all( (k,v) in source_dict.items() for (k,v) in dest_dict.items() )
こちらを参考にしました。
SQLAlchemyでDB固有の関数を実行する
難しいことはありませんでした。
以下はMySQLのtruncateという切り捨ての関数を使う例です。
rs = Item.query.\ filter(Item.maker_id == param['maker_id']).\ filter(func.truncate(Item.gedai / Item.price, 1) < 0.6).all()
SQLAlchemyのfuncオブジェクトは空気が読めるナイスガイなので、funcの後にDB関数名をそのまま書いて実行することが出来ます。
上記の例ですと、「truncate(items.gedai / items.price, %s) < %s」というSQLに変換されて実行してくれます。
また、SQLAlchemyのORMapperが生成されたSQLを確認するには、下記のように行います。Queryオブジェクトを引数に取ります。
def print_sql(query): ''' debug用途でSQL文を吐き出す ''' from sqlalchemy.dialects import mysql print(query.statement.compile(dialect=mysql.dialect()))
I ♥ SQLAlchemy!! Yummy!!
iPad mini4 を活用すべく検討していること
Macbook Pro Retinaが正直重たいので、出先ではiPad miniのSIMフリーモデルに切り替えようとしています。僕の利用用途の90%は満たしてくれるので。
- メールとネット
- 各種データ(Googleドライブ)
- Excel/Powerpoint
- Evernote
- Terminal(SSH)
- Markdown editor
足りないものがこの2つ。
2016.03.25 追記
iPad Pro 9.7が出ました。これで決まりですわ。
以下、自分用メモ。これらをセットアップすればノートPCは持ち運ぶ必要がなくなる。
用途 | アプリ |
---|---|
メール | Spark |
データ | Google Drive |
オフィス | Excel,Powerpoint |
打ち合わせメモ | Evernote |
ssh,sftp | Coda |
VCS | CodeBucket,Git |
Mysql | MySQL QueryDB |
リモートデスクトップ | Splashtop |
リモートデスクトップがあれば、母艦のマシンにアクセスできるのでそこでどうとでもできるわな〜
お友達からのお仕事を逃げるように断った話
数年に1回思い出したかのように連絡がある学友から、Web制作をどう進めるか悩んでる的な話があった。
こちらで簡単な資料を作って内部で検討する分にはええやろと思って持って行ったが、その学友の話している内容がさっぱりわからん。自分にはどう進めていいかわからんから、プロジェクトはあんたがオーナーである親戚の叔父を焚き付けて立ち上げてくれ、自分は集客(笑)を担当するから、だって。平たく言えばそういうことだった。
まぁ集客は少なからず必要なことだから、「どうやるつもりなんや」と聞いたら、セミナーに言って勉強してくると言ってきたので、ああ、コイツはオレを出汁にして自分のやりたいことだけをやる気なんだって思った。上手く行かなったら、逃げるような気がした。
なので、プロジェクトオーナーの叔父さんに「提案はしますし、条件面で折り合えば仕事はします。ですが、あの方と一緒に仕事するに当たっては僕の下につけますよ。あくまでも素人ですから。」ってメールで根回ししたら、そっくりそのまま学友にメールの内容を見せてしまった。内密にお願いしたのに... 抱えきれないんですかあなたは...
それを聞いた学友は裏切られた気持ちになったみたいで、僕に怒りの連絡があった。失礼なやつだあんたは、この仕事をするな、と。ん? それを決めるのはあなたではないし、立ち上げできないのにどうやって進めるつもりなのって強めに問い詰めたら、もうええんじゃボケ的なメールが来た。売り言葉を仕掛けたワイもワイだが、冷静にならずに買ってくるあなたもご立派だなぁと。
これはお金の問題じゃない。仮に僕の思うような体制が作れても間接的に接点を仕事でもってしまう限り、いつかは面倒なことになるだろう。無茶振りされる悪寒がしたので、学友にはキレ気味にもうこれ以上お話することはありませんと一方的にドアを閉めて、着信拒否に設定した。プロジェクトのオーナーには学友とのやり取りを転送して「かくかくしかじかで、仕事ができそうにないのですいません。」とメールした。
これで終わったな〜と思ってたら、学友がメールで謝罪しますと言ってきた。「はぁ?」っていうニュアンスで返信したら、そんな言葉を使うなんてひどいだって。お前謝罪したいんちゃうか。どうやったら償えるのか、責任を取る為に何が必要なのか考えてないんやなと落胆したので、その旨を返信して、迷惑メール設定を行いました。
僕の立場から語っているし至らぬ点はあったと思うけど、先方からは信じられる言葉が何一つもらえなかった。自分が手を入れたら良い結果になると思ったから未練は多少あったけど、そこが一番ガックリ来た。いくら求められても逃げるしか無いこともあるんだなって、改めて感じた。
自分の気持ちの整理が出来たので、同じような話にお悩みの人に参考になればと思って、書き散らしておきます。
顧問エンジニア育成入門、作るしか無いかもしれん
この種の議論は僕が10年前に通った道だ。10年間何も変わっていない。
今のIT技術者への期待論を見ていると、まるで建築士に、「何でも良いからカッコいい家を作ってよ」とそっくりかえって言い放つ住人の姿のようだ。自分がどんな暮らしをしたいのかも言えないくせに、提案だけを求める。そして、出てきた図面を見ると、「こんな値段じゃ高すぎるよ!」と、必ず文句をつける。
ユーザ側の『ITイノベーター』こそ、急いで育成するべきだ : タイム・コンサルタントの日誌から
なんでこうなるかと言えば、ITシステムというのは建物ではなくプラント(工場)だからだ。建物はそれを作るだけで良い。ただ、プラントになれば話は別。どういった情報を収集し、集計もしくは加工し、最終的にどんな価値を提供すれば良いのかを考え無くてはならない。
で、問題は「どういった情報を収集し、集計もしくは加工すれば、経営に資する価値が生まれるのか」を一気通貫で考えられる人は絶望的に少ないことだ。「顧客情報をこう使いたい」というビジョンはだせるが、その情報をどう集めていくのかについての知見がないと、絵に描いた餅。地に足の付かないビジョンほど怖いものはない。
情報の活用価値を見出す部分は、IT素養がゼロでも出来る。しかし、情報の収集や集計と加工は、現時点で高度な職人芸。職人芸である以上、職人によって成果に開きが出ることはご理解頂けると思う。だから挫折するわけだし、ないものねだりをすることにつながる。
開発は外部組織に出せばいいじゃないか、ビジョンを伝えるだけで良いだろうと皆さんそう仰る。是非「動かないコンピュータ」「IT 訴訟」等で検索して頂きたい。職人になる必要はないけれども、オーダーメイドの仕方がわからないのに開発を外に出すのは、手榴弾を巻いたベストを着ているようなものだ。いつその爆弾が爆発するか、わかったもんじゃない。
「ユーザから要求されたものを作ります」という受け身の姿勢に留まるという話の90%は、手榴弾を巻いた人間の言うことは怖くて近寄れないという当然の帰結にすぎないと思う。ユーザー側に外部から要件定義が出来る人間を登用する等の発想は無いんですかね。
方法論は嫌いだけど、ワイが顧問エンジニア育成入門、作るしか無いかもしれん。