複数のcount()の結果を四則演算

SQLにおいて表題のことをやりたかった。

■ 環境

  • Amazon Athena

■ count()

単純に”count()“の結果を計算するのであれば特に問題なくできるのだが、1つのクエリで複数の”count()“を実行し、その結果を使って四則演算したかった。

SELECT
  regist_date,
  count(1) as total,
  count(column1 < 10 or null) as count1, count(column1 >= 10 or null) as count2
FROM testtable
GROUP BY regist_date

以前使用した上記のSQLであれば、下記のようなことを行いたい。

count1 + count2

これを一度のクエリでは書けないので下記のようにすれば一応実行はできる。

SELECT regist_date, total, count1 + count2 as count3
FROM (
  SELECT
    regist_date,
    count(1) as total,
    count(column1 < 10 or null) as count1, count(column1 >= 10 or null) as count2
  FROM testtable
  GROUP BY regist_date
)

まぁ確かにできるのだがもっとスマートな書き方はないのかな。

以上。

■ 関連

複数条件のcount()

vim nowrap

表題の通り。たまに忘れるのでメモ。

■ 環境

  • Vim

■ nowrap

アクセスログ等、1行が長いファイルを`vim`で編集したい時に、改行されて行の全体が見えていると少々不便なこともある。よって改行されない状態でざっと見たい。

:set nowrap

これで思い通りの挙動をしてくれる。

以上。

count(distinct (case when … then … end))

SQLにおいて表題の件。自身はAthenaでとても重宝した。条件に合致した中での一意な数を取得したい。

■ 環境

  • Amazon Athena

■ count(distinct)

Athenaを利用しているので、読み込むデータ量も減らしたいしクエリを実行する対象は減らしたい。なので1回のクエリ実行で必要な情報を得たい。複数の条件で`count()`を取得したいが、これは以前のエントリで述べた通り。今回はさらに条件を絞った状態で`distinct`の値を取得したかった。

SELECT
  regist_date,
  count(1) as total,
  count(column1 < 10 or null) as count1, count(column1 >= 10 or null) as count2,
  count(distinct groupid) as group_count1,
  count(distinct (case when column1 < 10 then groupid end)) as group_count2, count(distinct (case when column1 >= 10 then groupid end)) as group_count3,
FROM testtable
GROUP BY regist_date

上記のようなSQLにすることで1度のクエリ実行で自身が得たいデータは全て取得できるようになった。

group_count1“は全体における”groupid“の`distinct`の値。一意な`groupid`の数を取得できる。

group_count2“は、`column1 < 10`の条件に合致した中での一意な`groupid`の数を取得できる。

group_count3“は…以下略。

以上。

■ 関連

複数条件のcount()

cronで実行されるスクリプトのPATH

表題の通り。たまに忘れて実行エラーになるのでメモ。

■ 環境

  • Amazon Linux

■ PATH

`PATH`が通っていないので、`cron`から実行されるとコマンドが見つからない系のエラーで失敗してしまうことがある。

$ sudo su -
# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
#

`cron`で実行されるときは下記しか`PATH`が通っていなかった。

/usr/bin:/bin

sbin“系のコマンドを使いたい時にいつもハマってしまう…。スクリプト内のコマンドは絶対PATHで書くものだと若い頃に師匠に教わったのをたまに忘れてる。

以上。

Googleプレゼンテーションのユーザ辞書

表題の件について、知らなかったのでメモ。

■ 環境

  • Google プレゼンテーション

■ ユーザ辞書

Googleプレゼンテーションを利用している。その中で個別用語を使用するとスペルチェックに引っかかるのか赤い下線が引かれ「もしかして」が表示される。プロジェクト内における個別の用語であったり、そもそものプロジェクト名であったりするので全てに赤い下線が引かれると煩わしく感じていた。

赤い下線が引かれた単語上で右クリックをすると、「もしかして」以外にも「ユーザ辞書に追加」というメニューがあることに気がついた。これをクリックすると赤い下線は消え、以降同じ用語を使用しても赤い下線が表示されることはなくなった。

ちなみに登録した用語はどこかに一覧としてあると思われるのだが、メニューから辿る方法を見つけられなかった。

ヘルプ > メニューを検索

上記で”辞書“と検索したら”単語リスト“が出てきたので、ここで確認ができるようだ。登録時と参照時に言葉が変わっていてわかりづらい…。

以上。