title: SQL count number of rows in unique combinations of key value columns
body: <p>Given the following MySQL table structure:</p>
  
  <pre><code>CREATE TABLE `order_params`( `order_id` BIGINT(30) NOT NULL, 
                `key` VARCHAR(50) NOT NULL, `value` VARCHAR(255) NOT NULL ); 
  </code></pre>
  
  <p>And this data:</p>
  
  <pre><code>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'); 
  </code></pre>
  
  <p>How do I get the following results?</p>
  
  <pre><code>browser Firefox os Windows              2
  browser Firefox os OSX                  1
  browser Safari os OSX                   1
  browser Safari os OSX version 5         1
  </code></pre>
  
  <p>The numbers on the right are the count of records that match the unique key/value combinations.  Is this even possible?</p>
  
  <p>OK, updating to show that I have tried this:</p>
  
  <pre><code>SELECT CONCAT(`key`, `value`), COUNT(*)
  FROM order_params 
  GROUP BY `order_id`, `key`, `value`;
  </code></pre>
  
  <p>And this is the result:</p>
  
  <pre><code>browserFirefox  1
  osWindows       1
  browserFirefox  1
  osWindows       1
  browserFirefox  1
  osOS X          1
  browserSafari   1
  osOS X          1
  </code></pre>
  
  <p>I've also tried this:</p>
  
  <pre><code>SELECT `key`, `value`, COUNT(*)
  FROM order_params 
  GROUP BY `key`, `value`;
  </code></pre>
  
  <p>Which produces this:</p>
  
  <pre><code>browser Firefox  3
  browser Safari   1
  os OS X          2
  os Windows       2
  </code></pre>
  
  <p>Obviously, neither of these is the desired result.</p>