在 SQL 中使用 3 列计数查询

Posted

技术标签:

【中文标题】在 SQL 中使用 3 列计数查询【英文标题】:Count query with 3 columns in SQL 【发布时间】:2012-11-05 16:58:36 【问题描述】:

我有一个名为“Library”的数据库和名为“Medien”的表。 其中有多个列,我需要查询以下名为 Fname、Mname、Lname 和 ISBN 的列。

我想计算有 ISBN 和没有 ISBN 的数据库总记录?

Fname = 作者的名字 Mname = 作者的中间名 Lname = 作者的姓氏

我想计算有多少条记录是 ISBN 和多少没有 ISBN?

我已经执行了以下命令

 Select COUNT(ISBN) as Fname FROM  `library`.`MEDIEN` where  Fname = `isbn`;
 Select COUNT(ISBN) as Mname FROM  `library`.`MEDIEN` where  Mname = `isbn`;
 Select COUNT(ISBN) as Lname FROM  `library`.`MEDIEN` where  Lname = `isbn`;
 Select COUNT(ISBN) as NtFname FROM `library`.`MEDIEN`where  Fname != `isbn`;
 Select COUNT(ISBN) as NtMname FROM `library`.`MEDIEN`where  Mname != `isbn`;
 Select COUNT(ISBN) as NtLname FROM `library`.`MEDIEN`where  Lname != `isbn`;

我不确定我是否执行了正确的命令。 因为有些 ISBN 记录只有 Fname,Mname 或 Fname,Lname 或 Mname,Lname 或 Fname , Lname,Mname。

例如

第一作者

Fname: asher Lname: baig

已经写了 5 本书的记录,但其中两个是 ISBN

总输出为 ISBN = 2

愿望输出会是这样的

ISBN=value and NtISBN=value

请帮我解决这个问题

【问题讨论】:

请发布您的架构、示例数据和所需的输出。 什么是verf1、verf2、verf3?您的问题不清楚。 不清楚你想要什么,也不清楚你遇到了什么麻烦。如果您发布以下三件事,我们可能会更自信地帮助您:1. 一组样本数据。 2. 你想要的结果。 3. 你实际得到的结果,以及为什么会有问题。 【参考方案1】:

您可能只想使用两个带有 OR 子句的查询。这将避免某些行被计算两次:

Select COUNT(ISBN) as count FROM library.MEDIEN where
 verf1 = 'isbn'
 OR verf2 = 'isbn'
 OR verf3 = 'isbn';

当然反过来:

Select COUNT(ISBN) as count FROM library.MEDIEN where verf1 != 'isbn'
   AND verf2 != 'isbn'
   AND verf3 != 'isbn';

【讨论】:

... 除了verfn 列是他用于COUNT() 聚合的别名(或似乎是),所以它们可能不存在于原始表中? @Clockwork-Muse - 是的,有效点。虽然从语句“我想计算有ISBN和没有ISBN的数据库记录”,我想我明白了发帖者的实际意图。我认为他们只是被 SQL 语法弄糊涂了。希望他们能澄清一下,但我想我会在有帮助的情况下留下我的答案。 @asherbaig - 我认为您需要发布您的架构。 ISBN 是一列吗?您是否正在为特定作者寻找不同的 ISBN 值? 有 4 列,其中之一是 ISBN。不,我想计算列 ISBN 中的总 ISBN 编号,但每个 isbn 编号都有 Fname 或 Mname 或 Lname。总记录数为 282953 其中如何许多记录有 ISBN 编号,有多少没有 ISBN 记录。例如,在我执行查询后,它给出 72589 条记录或行有 isbn 并且 25589 没有 isbn 编号。我希望它很清楚。 具有 ISBN 值的行将是:select count(1) from library.MEDIEN where ISDN is not null;,而没有 ISDN 编号的记录将是相反的:select count(1) from library.MEDIEN where ISDN is null;【参考方案2】:

你能试试这个查询吗

SELECT SUM (CASE WHEN (verf1 = 'isbn' OR verf2 = 'isbn' OR verf3 = 'isbn') THEN 1 ELSE 0 END ) ISBNCount
        SUM (CASE WHEN (verf1 = 'isbn' OR verf2 = 'isbn' OR verf3 = 'isbn') THEN 0 ELSE 1 END ) NtISBNC 
         FROM library.MEDIEN

【讨论】:

以上是关于在 SQL 中使用 3 列计数查询的主要内容,如果未能解决你的问题,请参考以下文章

按名称查询报表的 SQL 查询,其中许多列按状态计数

使用非索引列的 SQL 计数查询

Linq 计数错误(列)

如何优化访问计数器 SQL 查询?

SQL查询加入不同的表和计数

将列计数转换为行计数的 SQL 查询