在 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 列计数查询的主要内容,如果未能解决你的问题,请参考以下文章