计算 MY SQL 或 MS SQL 列中的单个项目

Posted

技术标签:

【中文标题】计算 MY SQL 或 MS SQL 列中的单个项目【英文标题】:Counting individual items in MY SQL or MS SQL column 【发布时间】:2020-04-14 16:22:06 【问题描述】:

我有列名为 Rule1 的数据,其值为 ..CorrectIncorrectUndefined

我能够使用 Group BY 在此特定列中获得它们的数量

select Rule1, count(*) from table_name group by Rule1;

我还有一列 Rule2,其值为 Correct,仅 Incorrect 当我尝试与上述类似的选择语句时,我得到了正确和不正确的唯一计数

我想让 Undefined 的计数为零,因为 Rule2 列中不存在 Undefined 如何做到这一点

如何编写需要在多列中显示固定值计数的查询

【问题讨论】:

请告诉我们哪个答案对您有用。 【参考方案1】:

您可以创建一个派生表,使用union all 枚举可能的值,然后使用left join 将您的表带入:

select x.rule1, count(t.rule1) cnt
from (select 'Correct' rule1 union all select 'Incorrect' union all select 'Undefined') x
left join mytable t on t.rule1 = x.rule1
group by x.rule1

这是一种跨数据库语法,适用于 mysql 和 SQL Server。

在最新版本的 MySQL 中,您可以使用 values(row ...) 语法:

select x.rule1, count(t.rule1) cnt
from (values row('Correct'), row('Incorrect'), row('Undefined')) x(rule1)
left join mytable t on t.rule1 = x.rule1
group by x.rule1

在 SQL Server 中,等效查询是:

select x.rule1, count(t.rule1) cnt
from (values ('Correct'), ('Incorrect'), ('Undefined')) x(rule1)
left join mytable t on t.rule1 = x.rule1
group by x.rule1

【讨论】:

【参考方案2】:

你也可以像这样使用 sum:

SELECT 
    sum(case when Rule1 = 'Correct' then 1 else 0 end) AS Rule1Correct,
    sum(case when Rule1 = 'Incorrect' then 1 else 0 end) AS Rule1Incorrect,
    sum(case when Rule1 = 'Undefined' then 1 else 0 end) AS Rule1Undefined,
    sum(case when Rule2 = 'Correct' then 1 else 0 end) AS Rule2Correct,
    sum(case when Rule2 = 'Incorrect' then 1 else 0 end) AS Rule2Incorrect  
FROM 
    table_name 
WHERE 
    1

它在一个查询中启用多个计数。我添加了所有计数,认为前两个就足够了。

此外,我不知道什么对服务器负载更好,这个或使用联合。

【讨论】:

这么好回答,埃里克?

以上是关于计算 MY SQL 或 MS SQL 列中的单个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?

SQL 如何从单个列中的所有值创建 JSON 数组

SQL 查询将多条记录中的值组合到单个列中

MS Access sql将5个表与列中的奇怪字符分组

如何在 SQL 选择查询中添加“或”?

sql SQL查询以查找表中的列中的重复项,从而更改列的排序规则以确保重复项检查为大小写