SQL 自分用まとめ

DESTINCT

SELECT DISTINCT 入金額
FROM 家計簿

みたいにDISTINCTは列名を指定して使う

SELECT DISTINCT 入金額, 費目
FROM 家計簿

 みたいに2つ列を指定するとこの2つが同じだったら取り除かれるようになる。
selectされた列にDESTINCTされるイメージをもつ。

ORDER BY

SELECT * FROM 家計簿
ORDER BY 入金額 DESC, 出金額 DESC
見たいに最後に使う。
order by に2つの列を指定すると1つ目の列でソートされた後に
その1つ目の列が同じあたいのものに関しては2つ目の列でソートされる。

UNION

共通のカラムをもつテーブル2つを繋げる
SELECT 費目, 入金額, 出金額 FROM 家計簿
 UNION
SELECT 費目, 入金額, 出金額 FROM 家計簿アーカイブ
UNIONにORDER使うときは列番号指定でソートした方が良い。
列名で指定する場合は1つ目のselect文のものを指定する。

集計関数

集計関数は基本的にselect文の中でしようする。 sum max min avg count DBの種類によって違うが基本的にこの5種類 集計関数は集計の対象となった全ての行に対して1回だけ計算を行う。 よって結果表は必ず一行になる。 count()とcount(列名)の違いはが全ての行を数えるのに対し、(列名)はnullの行を 無視してカウントする。 覚えておくテク 重複を除いたcount SELECT COUNT(DISTINCT 費目) FROM 家計簿

git 他の人のブランチで作業したい場合。

gitで開発中にバックエンドの実装をAさんがしてフロントはBさんにお願いするとなった場合にAさんのブランチから新たなブランチを切ってBさんが作業するか Aさんのブランチでそのまま作業するかはチームの方針によると思いますが、 今回は後者のパターン。

前提としてAさんのブランチはリモートにpush済みであるとする。(Aさんのブランチ名はtestとする) 以下、Bさんが行うコマンド

git fetch

git checkout origin/test

#いろいろ作業してコミットしたあとに

git push origin HEAD:test

これでAさんの最後のコミットから続けてBさんがコミットできます。

自分用メモ Rubyで気をつけること

requireとrequire_relativeの違いはファイルパスの起点となる場所の違い。

requireはrubyを実行しているディレクトリが起点になる。relativeはファイルの置かれている場所が起点になる。

 

for文使わない点が独特。配列なんかに対して繰り返せって感じのメソッド呼ぶことで繰り返しを記述する。

 

範囲オブジェクトをデフォルトでサポート

 

rubyがreturnを省略した際に返す値は、rubyvmのスタックに最後に積まれた

 

クラスとは別にモジュールという概念がある。

メソッドをグループ化してクラスに取り込みやすくしたもの

 

新規アプリ作成(vue込み)

rails new todo_sample --webpack=vue

bin/rails g controller home index

 

 

rails5.2系でCSRF対策を無効にするには、application_controller.rbに

protect_from_forgery

を追記。

 

ABC138 解けなかったやつ

C問題が解けない・・・

頂点を最後の配合とする二分木で考える必要があった。

頂点から伸びる2つの葉は、最大の価値を持った具材、それまでの配合で最大となった価値をもつ具材という葉になる。

枝の個数分1/2されていくので、価値の小さい具材から配合して行けば良いことが分かる。

以下AC

n = int(input())

list1 = list(map(int,input().split()))

while len(list1) > 1:

  list1 = sorted(list1)

  v1 = list1.pop(0)

  v2 = list1.pop(0)

  list1.append((v1+v2)/2)

print(list1[0])

ABC137の解けなかったやつC問

アナグラムかどうかの判定問題

文字列の中のアルファベットごとの出現回数を調べる

文字列を辞書順にソートして同じ文字列になればそれはアナグラムである

この2つの方法があり、ひらめくことが出来たが

組の数を数えるところでTLEしてしまった。

この場合はハッシュテーブルを使うのが早いらしい。

pythonでいうdictinaryのこと。

少し面倒なのがdictはキーに対する値が設定されていない場合エラーになる。

そこでキーに対する初期値を与える便利なライブラリがある。

from collections import defaultdict

それが上のやつ。

countDict = defaultdict(int)

みたいに引数に関数を渡すと初期値を設定してくれる。

intはlambda:intという無名関数と同じで0がセットされる。

def func():

      return 10

countDict = defaultdict(func)

みたいにすればキーに対する初期値が10になる。

 

これでACできる。

from collections import defaultdict
N = int(input())
S = [''.join(sorted(list(str(input())))) for i in range(N)]
countDict = defaultdict(int)

ans = 0
for s in S:
ans += countDict[s]
countDict[s] += 1
print(ans)

Django form 画像がアップロードされない。

<form action="" enctype="multipart/form-data" method="post">

だいたい、templateのenctype="multipart/form-data"を書き忘れてる。

 

これで解決しない場合は、

<form action="" method="post" enctype="multipart/form-data">

のようにmethodがenctypeより先にきてる。

僕はこっちの方で詰まってました。

フロントエンド知らないとこういう場所でドン詰まりしてしまうなぁ・・・