当前位置: 首页 > 面试题库 >

SQL查询来计算某些值在多行中出现的次数

呼延衡
2023-03-14
问题内容

假设我有一张选举数据表,称为选举,每个选举每个选民都有一行,如下所示:

VoterID ElectionID
A           1
A           2
B           1
C           2
D           3
E           1
E           2

我想知道在选举1和选举2中都投票的选民人数;我不在乎别人 该数字应为2(选民A和选民E)。

这样的事情会做:

select count(Elections) as NumVoters
from (
select VoterID, ElectionID, count(ElectionID) as Elections
from ELECTIONS
where ElectionID=1 or ElectionID=2
group by VoterID
having (count(ElectionID)=2)
) x;

更新:这是我在这里的第一个问题,我被那些热心而又快速的人们所震撼。我修改了上面的查询,以解决最后缺少别名并添加终止分号的问题。

谢谢你!


问题答案:

是的。你所拥有的应该工作。(您将需要在派生表上添加一个别名,您得到的错误消息应该是不言自明的。易于修复,只需在查询末尾添加一个空格和字母c(或您想要的任何名称)即可。

关于重复(VoterID, ElectionID)元组的潜力,有一个警告。

如果您对(VoterID,ElectionID)有唯一的约束,那么您的查询将正常工作。

如果您没有唯一的约束(不允许重复(VoterID, ElectionId)),则可能有一个选民有两(2)行用于ElectionID
1,而没有行用于ElectionID 2 …使该选票包含在计数中。在ElectionID 1中进行了两次投票而在ElectionID
2中仅进行了一次投票的选民,该选民将从计数中排除。

在COUNT内包含DISTINCT关键字可以解决该问题,例如

HAVING COUNT(DISTINCT ElectionID) = 2

我会以不同的方式编写查询,但是您所拥有的将起作用。

为了获得参与ElectionID
1和ElectionID2的VoterID的数量,以提高性能,我避免使用内联视图(MySQL称其为派生表)。我会让查询改为使用JOIN操作。像这样的东西:

SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
  FROM elections e1
  JOIN elections e2
    ON e2.voterID = e1.voterID
 WHERE e1.electionID = 1
   AND e2.electionID = 2

如果保证(voterID, ElectionID)唯一,那么选择可能会更简单:

SELECT COUNT(1) AS NumVoters
  FROM elections e1
  JOIN elections e2
    ON e2.voterID = e1.voterID
 WHERE e1.electionID = 1
   AND e2.electionID = 2


 类似资料:
  • 问题内容: 在SQL Server中,我试图计算自过去5天首次观察到与今天相同的天气(今天假设是2018年8月6日)以来的天数。每个镇。 数据如下: 这需要执行得很好,但到目前为止,我只想针对每个镇进行单个查询(并且将会有数十个镇,而不仅仅是四个镇)。这行得通,但不会扩展。 这是多伦多的那个… …正确返回4,因为今天有雨,而过去5天内第一次下雨是8月3日。 但是我想要返回的是一个像这样的表: 这怎

  • 我有一张这样的桌子,但有1mi行: 我想知道有多少团队被拜访了N次。 例如,如果我想知道一次访问了多少个团队,结果将是1(因为只有团队2)。如果我想要三次,结果将是2(因为团队1和4都访问了三次)。 大概是 (然后=2,=3,依此类推)。。。但是因为我不能在WHERE之后使用COUNT,所以我不知道怎么做。有人能帮忙吗? 如果有帮助,它不一定需要连接到探视日期。可以是“有多少团队出现一次/两次/三

  • 问题内容: 如果我有这样的事情: 例如,如果我想将“ 0”的出现次数作为一个值进行计数而不必重复整个列表,那甚至有可能吗?如何? 问题答案: 正如我在评论中提到的,您可以在函数内使用生成器,如下所示: 或者,作为一种稍微优化和实用的方法,您可以使用如下功能: 基准测试: 请注意,虽然在这种情况下使用函数可能会得到更好的优化,但是为了获得关于这两种方法的全面而通用的想法,您还应该针对较大的数据集运行

  • 问题内容: 我的sql查询获取固件的错误修复验证列表,例如def-456是一张票,要求我对产品进行固件测试。def-456有几个子任务,记录结果。结果记录为:id:abc-123,abc-124,abc-125等(如下表所示)。这些对应的ID的结果为“通过”或“失败”。我需要计算两个值----> 1.尝试次数:在以下示例中,尝试次数将为3/5,有3次通过和2次失败(即通过/通过+失败),在这里我可

  • 问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连

  • 问题内容: 我试图通过连接多个表从sql查询中获得所需的结果。由于知识有限,因此寻求大家的帮助。 我正在尝试获取每个经理和员工的审核详细信息。我有3张桌子: 以下是 HR 表的示例数据: 以下是 REQUIRED_AUDITS 表的示例数据: 以下是 SCORE_ENTRY 表的示例数据: 因此,现在我想显示每个经理需要进行的审核数量,完成的数量以及完成的百分比。 计算方法如下: 1.要计算审核数