在mysql中如何使一个属性成为两个属性之和

au9on6nz  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(424)

我有一个名为results的数据库,它是一个特定问题的投票结果。现在我的问题是,如果一个表中的一个属性是其他两个属性的和,那么这个属性是否可能。例子:
数据库的属性包括:
赞成票
没有投票
弃权票
选民总数(投票人数)

CREATE TABLE `results` (
 `result_id` varchar(10) NOT NULL,
 `count_yes` int(3),
 `count_no` int(3),
 `count_abstain` int(3), 
 `total_voters` *Default sum of yes no and abstain votes*,
  UNIQUE (result_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

提前谢谢!

toiithl6

toiithl61#

如果您使用的是mysql 5.7.6或更新版本,那么可以使用生成的列

CREATE TABLE `results` (
 `result_id` varchar(10) NOT NULL,
 `count_yes` int(3),
 `count_no` int(3),
 `count_abstain` int(3), 
 `total_voters` INT(3) AS count_yes + count_no + count_abstain,
  UNIQUE (result_id)
)
qrjkbowd

qrjkbowd2#

您应该创建一个视图来计算额外的 total_voters 列。

CREATE VIEW total_voters_view AS
SELECT result_id,
count_yes,
count_no,
count_abstain,
(count_yes + count_no + count_abstain) as total_voters
FROM results;
disbfnqx

disbfnqx3#

有两种方法可以将其作为表/视图对象:
方法1:创建一个视图,该视图适用于所有版本的mysql。您可以创建一个视图,其中有一个额外的列来汇总投票,如下所示:

CREATE VIEW `results_view` AS
SELECT
    result_id,
    COALESCE(count_yes, 0) AS count_yes,
    COALESCE(count_no, 0) AS count_no,
    COALESCE(count_abstain, 0) AS count_abstain,
    (COALESCE(count_yes, 0) + COALESCE(count_no, 0) + COALESCE(count_abstain, 0)) as total_voters
;

注意使用 COALESCE(..., 0) 以确保你 NULL 值为零。任何一个数学和 NULL 在mysql中等于 NULL . 即。 NULL + 2 = NULL .
方法2:在基表中使用生成的列这在mysql v5.7.6+中适用。将表语句重新定义为:

CREATE TABLE `results` (
 `result_id` varchar(10) NOT NULL,
 `count_yes` int(3),
 `count_no` int(3),
 `count_abstain` int(3), 
 `total_voters` int(3) AS (COALESCE(count_yes, 0) + COALESCE(count_no, 0) + COALESCE(count_abstain, 0)),
  UNIQUE (result_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

请注意该列 total_voters . mysql将其称为生成列,尽管sql的其他风格倾向于将其称为计算列。
如果已有表,只需添加列即可,如下所示:

ALTER TABLE `results` ADD COLUMN `total_voters` int(3) AS (COALESCE(count_yes, 0) + COALESCE(count_no, 0) + COALESCE(count_abstain, 0));
ecfdbz9o

ecfdbz9o4#

选择源表中的行数。这应该给你一个价值 total_voters 您可以将其插入到结果表中。 SELECT COUNT(*) FROM source_table . 如果您提供源表的模式,我可以更好地帮助您。

相关问题