我的表有3列:A,B和C。这些列可以为true或false。
我想计算每种可能的组合。

样本数据:

CREATE TABLE `myTable` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `A` mediumint default NULL,
  `B` mediumint default NULL,
  `C` mediumint default NULL,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=1;

INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (0,0,1),(1,1,0),(0,0,0),(1,1,0),(1,0,0),(1,0,1),(0,0,1),(1,1,1),(0,1,0),(1,1,1);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (1,0,1),(0,1,0),(1,1,1),(0,0,1),(1,0,0),(0,0,0),(0,0,1),(1,1,0),(0,0,0),(1,1,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (1,1,0),(0,1,0),(1,1,1),(0,0,0),(1,1,0),(1,0,1),(1,1,1),(1,0,1),(1,1,1),(1,1,1);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (0,1,0),(1,0,0),(0,1,0),(0,0,0),(0,0,0),(1,0,0),(1,0,1),(1,1,1),(0,0,1),(0,0,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (1,1,1),(0,0,1),(1,1,0),(1,1,0),(1,0,0),(0,0,1),(0,1,1),(1,0,1),(1,0,0),(1,1,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (1,1,1),(0,0,0),(1,0,1),(1,0,0),(1,0,0),(1,0,0),(0,0,1),(1,1,1),(0,1,1),(1,1,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (0,1,1),(0,1,1),(0,1,0),(0,0,0),(0,1,0),(0,1,1),(0,1,1),(0,1,1),(0,1,0),(0,1,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (0,1,1),(0,0,1),(0,1,0),(1,1,0),(0,0,0),(1,1,1),(1,1,0),(0,1,1),(1,0,1),(1,0,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (0,1,0),(1,1,1),(0,1,0),(1,1,0),(1,0,1),(1,1,0),(0,1,0),(0,1,0),(0,1,0),(0,1,0);
INSERT INTO `myTable` (`A`,`B`,`C`) VALUES (1,1,0),(0,1,0),(1,1,1),(0,0,0),(1,0,0),(1,1,0),(1,0,1),(0,0,1),(1,0,1),(1,0,0);


结果示例(来自样本数据):

组合:计数
无:11
答:12
B:17
C:10
AB:16
卑诗省:9
AC:11
ABC:14

一个查询有可能吗? (MySQL)

最佳答案

这似乎是一个简单的countGroup by

SELECT A, B, C, count(*)
FROM MyTable
GROUP BY A, B, C;


DEMO:

如果需要,可以结合使用concat和case来显示值的字符串。

SELECT concat(case when A = 1 then 'A' else '' end,
              case when B = 1 then 'B' else '' end,
              case when C = 1 then 'C' else '' end)  as Combination
     , count(*)
FROM MyTable
GROUP BY A, B, C
ORDER BY Combination;


或如Paul Spiegel在评论中所示:

SELECT concat(left('A', A), left('B', B), left('C', C)) as Combination
     , count(*)
FROM MyTable
GROUP BY A, B, C
ORDER BY Combination;


给我们:

+----+-------------+----------+
|    | Combination | count(*) |
+----+-------------+----------+
|  1 |             |       11 |
|  2 | A           |       12 |
|  3 | AB          |       16 |
|  4 | ABC         |       14 |
|  5 | AC          |       11 |
|  6 | B           |       17 |
|  7 | BC          |        9 |
|  8 | C           |       10 |
+----+-------------+----------+

关于mysql - SQL-每个组合的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46919033/

10-16 19:11