次の MySQL テーブル構造があるとします。
CREATE TABLE `order_params`( `order_id` BIGINT(30) NOT NULL,
`key` VARCHAR(50) NOT NULL, `value` VARCHAR(255) NOT NULL );
そして、このデータ:
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('1', 'browser', 'Firefox');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('1', 'os', 'Windows');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('2', 'browser', 'Firefox');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('2', 'os', 'Windows');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('3', 'browser', 'Firefox');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('3', 'os', 'OSX');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('4', 'browser', 'Safari');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('4', 'os', 'OSX');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('5', 'browser', 'Safari');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('5', 'os', 'OSX');
INSERT INTO `order_params` (`order_id`, `key`, `value`) VALUES ('5', 'version', '5');
次の結果を得るにはどうすればよいですか?
browser Firefox os Windows 2
browser Firefox os OSX 1
browser Safari os OSX 1
browser Safari os OSX version 5 1
右側の数字は、一意のキーと値の組み合わせに一致するレコードの数です。これは可能ですか?
OK、これを試したことを示すために更新します:
SELECT CONCAT(`key`, `value`), COUNT(*)
FROM order_params
GROUP BY `order_id`, `key`, `value`;
そして、これは結果です:
browserFirefox 1
osWindows 1
browserFirefox 1
osWindows 1
browserFirefox 1
osOS X 1
browserSafari 1
osOS X 1
私もこれを試しました:
SELECT `key`, `value`, COUNT(*)
FROM order_params
GROUP BY `key`, `value`;
これが生成されます:
browser Firefox 3
browser Safari 1
os OS X 2
os Windows 2
明らかに、これらはどちらも望ましい結果ではありません。