mysql - SQL - 每个组合的总和

标签 mysql sql database

我有一个包含 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
乙:17
C: 10
AB: 16
公元前:9
空调:11
美国广播公司: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/

相关文章:

javascript - 如何在javascript中获取sqlite数据库值

database - 家谱:关联数据库中的家庭关系

sql - 如何使用 HeidiSQL 在 Firebird 中设置超时?

mysql - 选择列最大的数据

c# - Mysql Linq 已经有一个与此连接关联的打开的 DataReader,必须先将其关闭

php - MySQL 首选项查找器

mysql - 使用 IN 运算符的子查询

mysql - 如何在 MySQL 中的 select 和 insert 查询中使用过程变量?

mysql - 电子商务的数据库设计问题

mysql - 使用范围 ID 匹配连接表