前提・実現したいこと
MySQLで特定のIPアドレス含むかどうかのフラグを含めたSELECT文を作成したい
fooテーブル
id | foo_id | ip |
---|---|---|
1 | 1 | aaa |
2 | 1 | bbb |
3 | 1 | ccc |
4 | 2 | bbb |
5 | 2 | ccc |
6 | 2 | ddd |
7 | 3 | aaa |
8 | 4 | bbb |
欲しい結果(ipアドレスがaaaの人が実行するてい)
id | foo_id | count | flag |
---|---|---|---|
1 | 1 | 3 | 1 |
2 | 2 | 3 | 0 |
3 | 3 | 1 | 1 |
4 | 4 | 1 | 0 |
試したこと
元のテーブルにflagを追加
SQL
1CASE WHEN ip = 'aaa' THEN 1 ELSE 0 END as flag
foo_idとipでユニークなのでSUMでflagを取得
SQL
1SELECT id, foo_id, COUNT(*) AS count, SUM(flag) AS flag
これを組み合わせれば実現できそうですが、この先どうしていいかわからないので教えていただきたいです
補足情報(FW/ツールのバージョンなど)
MySQL 5.6
sql
1CREATE TABLE `default`.`foo` ( 2 `id` INT NOT NULL AUTO_INCREMENT , 3 `foo_id` INT NOT NULL , 4 `ip` VARCHAR(255) NOT NULL , 5 PRIMARY KEY (`id`) 6) ENGINE = InnoDB;
sql
1INSERT INTO `foo` (`id`, `foo_id`, `ip`) 2VALUES ('1', '1', 'aaa'), ('2', '1', 'bbb'), ('3', '1', 'ccc'), ('4', '2', 'bbb'), ('5', '2', 'ccc'), ('6', '2', 'ddd'), ('7', '3', 'aaa'), ('8', '4', 'bbb')
MySQLのバージョンは何でしょうか。
あと、テーブル定義(CREATE TABLE)とサンプルデータ(INSERT)を提示してください。
本文に書いてしまったのでこちらにも転記いたします
バージョン MySQL 5.6
テーブル定義
CREATE TABLE `default`.`foo` (
`id` INT NOT NULL AUTO_INCREMENT ,
`foo_id` INT NOT NULL ,
`ip` VARCHAR(255) NOT NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB;
サンプルデータ
INSERT INTO `foo` (`id`, `foo_id`, `ip`)
VALUES ('1', '1', 'aaa'), ('2', '1', 'bbb'), ('3', '1', 'ccc'), ('4', '2', 'bbb'), ('5', '2', 'ccc'), ('6', '2', 'ddd'), ('7', '3', 'aaa'), ('8', '4', 'bbb')
回答2件
あなたの回答
tips
プレビュー