SQL

順位を取得。※但し参照するレコードが増えるとクソ重い

pointフィールドを元に、降順で自分の順位を求める。※存在しないidでも_rank_が1になるので要注意 ▼pointが同値の場合、タイ扱い SELECT count(*)+1 AS _rank_ FROM HOGE_TABLE WHERE point > (select point FROM HOGE_TABLE WHERE id = ?); ▼pointが同値の…

条件に当てはまるレコードをランダムで、1レコードのみLEFT JOINしたい

ORDER BY RAND()後にGROUP BYできないので大変。 ORDER BY RAND()状態で一時テーブルを作る LEFT JOIN時にGROUP BYする でOK。 テーブル place 場所テーブル place_comment 場所へのコメント情報テーブル image_pathを持ち、nullでないレコードをJOINしたい …

クロス集計(複数のカウントを取る)

クロス集計とか言っておきながらCOUNT()は使わない。 place::場所テーブル id lat::緯度 lng::経度 name::名称 comment::コメントテーブル id:: id__place::関連するplaceテーブルのID body::コメント本文 wannago_or_beenthere::w(行きた…

カウントの結果を条件に含める

SQL

HAVINGでおk SELECT customer.*, COUNT(customer_user.id__customer) AS COUNT__customer_user FROM customer LEFT JOIN customer_user ON customer.id = customer_user.id__customer GROUP BY customer.id HAVING 0 < COUNT__customer_user

二重のLEFT JOIN

SQL

DB user::社員 id::社員ID name::社員名 project::案件 id::案件ID name::案件名 id__customer_user__agency::代理店(取引先)社員ID id__customer_user__client::クライアント(取引先)社員ID id__user__main_director::メインディレクター(社員)ID cus…

LEFT JOIN/RIGHT JOINにANDが使えることをよく忘れるのでメモ

テーブルは以下の通り。 ユーザは複数の部署に所属できる為、中間テーブルbelong_memberを設けている。 user(ユーザ情報テーブル id name belong(所属部署テーブル) id name belong_member(ユーザと所属部署を紐付け) id__belong id__user 取得したい結…

文法の違い

項目 MySQL SQLite PostgreSQL オートインクリメント AUTO_INCREMENT AUTOINCREMENT 未調査 ランダム RAND() RANDOM() 未調査 文字コード設定 SET NAMES utf8 未調査 SET NAMES 'utf8' UNSIGNED ○ × 未調査

期間を指定するオレオレメモ

もっといい方法があるような気もするけど思いつかないので。 p…

掲示板向けクエリ

threadテーブル no スレッドNo title スレッドタイトル resテーブル no レスNo no__thread スレッドNo name 投稿者名 body 本文 datetimes 日時 SELECT A.no AS 'A.no', A.title AS 'A.title', COUNT(res.no__thread), res.datetimes AS 'res.datetimes' FRO…

内部結合やら左外部結合やらの備忘録

色々INNER JOINして、最後にLEFT JOINで点数別のコメントを追加する。 論理名 テーブル名 下限フィールド名 上限フィールド名 参照値 合計点数 comment min max examinee.point 区分1の点数 comment_division_1 min max examinee.point_div1 区分2の点数 com…

一時テーブルを作って、元のテーブルからコピーする

SQL

CREATE TEMPORARY TABLE comment_division_1 ( no INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, no__question INTEGER NOT NULL, division INTEGER NOT NULL, max INTEGER NOT NULL, min INTEGER NOT NULL, comment TEXT NOT NULL ); INSERT INTO comment_d…

別テーブルの特定条件にマッチしたレコード数を取得

SQL

userテーブル 個人情報が保存されている。 no name 1 AAAA 2 BBB 3 CC user_logテーブル userテーブルの個人情報が変更される時、変更前の情報をバックアップとして保存していく。 no no__user name 1 1 A 2 2 B 3 3 C 4 1 AA 5 2 BB 6 1 AAA 欲しい結果セッ…

別テーブルに存在しないレコードだけを引っ張ってくる。

SELECT DISTINCT no, name_sei, name_mei FROM user WHERE class = ? AND no NOT IN ( SELECT no__user FROM examinee WHERE 2 = flgPassing ) ORDER BY name_sei, name_mei LIMIT 0, 5 別件(忘れないように) SELECT DISTINCT no, name_sei, name_mei FROM…

特定カラムの重複なしで最新レコードを取得

SQL

備忘録メモメモ。 テーブルはarticleとcontents 主キーはarticle.no article.noContentsの重複をなくしたい 最新レコードの判断はarticle.datetimesで判断 SELECT A.no, A.noContents, A.datetimes, A.title, A.body, A.aword, A.flgOpen, contents.name, co…

SQLiteはカラムの削除ができない・・・だと・・・?

SQL

http://d.hatena.ne.jp/rayfill/20071107/1194373607

UNIONでテーブルを連結して検索するサンプルクエリ

SQL

hoge0とhoge1テーブルあったとする。 それぞれをdatesフィールドで降順ソートし、連結して先頭から5件を取得するサンプル。 ( SELECT no, name, dates, 0 //※ FROM hoge0 ORDER BY dates DESC ) UNION ALL ( SELECT no, name, dates, 1 //※ FROM hoge1 ORDER…