Quantcast
Channel: プログラム の個人的なメモ
Viewing all articles
Browse latest Browse all 860

【MySQL】 GROUP BY句での論理演算 ~ BIT_OR() 等 ~

$
0
0

■ はじめに

 * テーブルのBOOL(BIT)項目に対して、GROUP BYした後に論理演算 OR をしたかったので調べてみた

【MySQL】解決案

 * BIT_OR() ってのがある
公式サイト
https://dev.mysql.com/doc/refman/5.6/ja/group-by-functions.html

■ 実行環境

 * DB : MySQL5.7

■ サンプルデータ

 * トイレ掃除チェックリストで考える。
  => 一日中のうち、一回でもダメ(NG=true)だったらアウト

テーブル

-- トイレ掃除チェックリスト
CREATE TABLE `toilet_clean_checklist` (
	`check_datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'チェック日時',
	`ng` BIT(1) NOT NULL DEFAULT b'0' COMMENT 'NG:ダメだったら 1(true)',
	`inspector` VARCHAR(10) NULL DEFAULT NULL COMMENT 'チェックした人'
)
ENGINE=InnoDB
;

データ

REPLACE INTO `toilet_clean_checklist` (`check_datetime`, `ng`, `inspector`) VALUES
	('2018-04-10 09:30:37', b'0', 'Mike'),
	('2018-04-10 17:31:08', b'0', 'Tom'),
	('2018-04-10 21:31:29', b'0', 'Sam'),
	('2018-04-11 08:21:52', b'0', 'Mike'),
	('2018-04-11 11:12:34', b'0', 'Tom'),
	('2018-04-11 21:33:35', b'1', 'Sam'),
	('2018-04-12 08:33:48', b'1', 'Tom'),
	('2018-04-12 11:12:17', b'1', 'Mike');
データ表示
check_datetime     | ng | inspector
-------------------+----+-----------
2018-04-10 09:30:37|  0 |      Mike
2018-04-10 17:31:08|  0 |       Tom
2018-04-10 21:31:29|  0 |       Sam
-------------------------------------
2018-04-11 08:21:52|  0 |      Mike
2018-04-11 11:12:34|  0 |       Tom
2018-04-11 21:33:35|  1 |       Sam
-------------------------------------
2018-04-12 08:33:48|  1 |       Tom
2018-04-12 11:12:17|  1 |      Mike

■ サンプル

SQL文

SELECT
 DATE_FORMAT(tcc.check_datetime, '%Y-%m-%d') AS date,
 BIT_OR(tcc.ng) AS result
FROM
 toilet_clean_checklist AS tcc
GROUP BY
 DATE_FORMAT(tcc.check_datetime, '%Y-%m-%d')

出力結果

date       | result
-----------+--------
2018-04-10 |     0
2018-04-11 |     1
2018-04-12 |     1

Viewing all articles
Browse latest Browse all 860

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>