【问题标题】:Extracting Data from two tables in SQL从 SQL 中的两个表中提取数据
【发布时间】:2014-11-13 18:45:40
【问题描述】:

我有两张桌子

表 1。

Name         Grade   Math  
---------------------------    
Chris          A      30
Julie          AA     35
Ross           AA     32     

表 2

Name       English
-------------------------    
Julie      29
Chris      22
Ross       20

我想获得数学成绩为 AA 的学生的英语成绩总和。我怎样才能做到这一点?请帮忙。

编辑:我想获得数学成绩为 AA 的学生的英语成绩总和,即 Julie 和 Ross:英语成绩总和为 29+20。

【问题讨论】:

  • 发布你想要的输出
  • 这对我来说像是家庭作业。你自己尝试过什么吗?有很多方法可以实现这一目标。向我们展示一些努力,我们为您提供替代方案:-)
  • 您还应该告诉我们您的桌子。什么是主键?这对于构建正确的查询至关重要。例如,当两个表的主键都是名称时,到目前为止给出的一个答案效果很好,但否则可能会显示错误的结果。
  • @ThorstenKettner 这是对许多复杂任务的简化,我需要这个技巧来完成该任务。我已经坐了大约 12 个小时,完全糊涂了。

标签: sql sql-server


【解决方案1】:

试试这个,

SELECT Sum(B.English) Total
FROM   #Table_1 A
JOIN   #Table_2 B ON A.Name = B.Name
WHERE  Grade = 'AA' 

如果你想单独使用这个标记

SELECT A.Name,
       Sum(B.English) Total
FROM   #Table_1 A
JOIN   #Table_2 B ON A.Name = B.Name
WHERE  Grade = 'AA'
GROUP  BY A.Name 

【讨论】:

    【解决方案2】:

    试试

    SELECT SUM(t2.English)
    FROM Table1 t1
    JOIN Table2 t2
    ON t1.Name = t2.Name
    WHERE t1.Grade = 'AA'
    

    【讨论】:

    • 它告诉我不能识别多部分标识符 t2.English
    • 您需要更改它以匹配您的列名和表名。
    • @L.G:这是一个非常非常基本的连接。您了解 SQL 的第一件事。您应该能够理解它并自己发现错误。当你被告知无法识别 t2.English 时,你怎么能不自己想出这个错误信息的原因呢?
    【解决方案3】:

    从一个表中获取数据的直接方法是使用 EXISTS 或 IN。

    select sum(english)
    from table2 t2
    where exists
    (
      select *
      from table1 t1
      where t1.name = t2.name
      and t1.grade = 'AA'
    );
    

    带 IN:

    select sum(english)
    from table2
    where name in
    (
      select name
      from table1
      where grade = 'AA'
    );
    

    我更喜欢这里的 IN,但这只是个人喜好问题。

    两个查询都假定两个表的主键都是名称。我让你告诉我们,但你没有。再说一遍:使用另一个主键,您可能需要其他查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多