我有一张看起来像这样的 table :
| A | B | C | ... | Z | <- names of columns
-----------------------
| 1 | 0 | 1 | ... | 1 |
| 0 | 1 | 1 | ... | 1 |
| 1 | 1 | 1 | ... | 1 |
| 0 | 1 | 1 | ... | 0 |
| 1 | 0 | 1 | ... | 1 |
我想将所有列中的所有 1 加起来并列出来。我怎样才能使用 MySQL 做到这一点?列数约为 80,如果可能的话我不想在 SQL 调用中列出它们。
我希望得到类似这样的回复:
A: 3
B: 3
C: 5
...
Z: 4
最佳答案
此表的设计方式使您描述的查询更加困难。
因为它们是相同的类型值,所以将许多列用于应该比较或一起计数的数据值称为重复组。这违反了数据库规范化规则。
存储此数据的更传统方式是超过 80 行,而不是 80 列。
CREATE TABLE mytable (
id INT PRIMARY KEY,
label CHAR(1) NOT NULL,
value TINYINT NOT NULL
);
INSERT INTO mytable VALUES
('A', 1), ('B', 0), ('C', 1), ...
然后你可以像这样使用一个带有聚合函数的简单查询:
SELECT label, SUM(value)
FROM mytable
GROUP BY label;
有时候使用非规范化表设计(比如您当前的表)是值得的,但那时候您需要针对特定查询进行优化。使用非规范化设计时要小心,因为它们以牺牲您可能针对相同数据运行的所有其他查询为代价来优化一个查询。您要进行的查询是使用您当前拥有的非规范化设计变得更加困难的查询之一。
关于mysql - 如何计算所有列中的数字或出现次数并使用 MySQL 列出它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749563/