Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 然后在SQL数据库中用group by查询求和除以_C#_Sql_Sql Server - Fatal编程技术网

C# 然后在SQL数据库中用group by查询求和除以

C# 然后在SQL数据库中用group by查询求和除以,c#,sql,sql-server,C#,Sql,Sql Server,最近我遇到了SQL的SUM函数和GROUPBY子句的问题。我想在浮动值的基础上找到平均GPA成绩点 以下是我到目前为止一直在使用的代码: SELECT semesterid, SUM( value ) AS TotalValue FROM tbcourse GROUP BY semesterid; 如果该值是单个成绩点,则以下内容将为您提供semesterid每个值的平均GPA成绩点 如果您有任何问题或意见,请随时发表相应的意见。您使用GROUP BY和SUM AGGRATE函数

最近我遇到了SQL的SUM函数和GROUPBY子句的问题。我想在浮动值的基础上找到平均GPA成绩点

以下是我到目前为止一直在使用的代码:

SELECT semesterid,
       SUM( value ) AS TotalValue
FROM tbcourse
GROUP BY semesterid;
如果该值是单个成绩点,则以下内容将为您提供semesterid每个值的平均GPA成绩点


如果您有任何问题或意见,请随时发表相应的意见。

您使用GROUP BY和SUM AGGRATE函数是正确的。不过,这里的部分技巧是,您需要获取每个类的小时*点的数据产品,这些数据产品是从聚合中获得的。因此,您需要两个查询步骤,一个是汇总部门的输入数据,然后是计算积分/学分的步骤

我的建议是使用内部查询来解决这类问题。 基本上,你使用来自。。。编写第二个内部查询以生成要从中选择的特定或自定义数据集

那么这对你的问题意味着什么呢

我不确定您的数据实际上是什么样子的,所以我尝试了一下,并假设了两个表。因为你有一个学期ID和课程ID,我猜也有,我认为这意味着你至少有这些。我假设了一些简单的表结构,下面是我在您的情况下根据我的建议所做的:

学期表

课程表

查询1::按学期分组以查看按学期的GPA

查询2::查询2-对所有学期进行求和,以获得加权累积GPA

我还制作了一个SQL FIDLE,这样您就可以处理这个问题,如果您愿意,可以更改表结构并尝试更多的查询以获得正确的结果。另外,如果我没有回答你的问题,请随时寻求更多帮助!希望能有帮助

更新
我不认为使用AVG解决这个问题是正确的。原因是GPA计算不是标准平均值——它是加权平均值。换句话说,平均学分是加权平均的特例,其中所有要素学分的权重都是相同的,这不适用于不同学时数的课程。

您的代码在哪里?先生,我当然有一张表……其中我记录了科目分数等……现在我想找到GPASelect SEMETERID,semesterid将sumvaluee作为tbcourse组的总值;您可以通过显示tbcourse源表中的字段以及一些示例数据,并根据这些示例数据显示所需的输出来提高问题的质量。GPA是如何计算的?恕我直言,我认为这是不正确的。虽然每个学期平均分数的想法很接近,但这个平均值是一个简单的/非加权平均值。请参阅我的详细答案,并随时提出问题或推回。谢谢很公平-我不知道GPA是如何运作的。我主要提到上述内容是为了确保他们了解AVG功能。我会问更多的信息,以确保。谢谢先生…你做了详细的…谢谢你的时间@robobear@user8039198我的荣幸!我很高兴你觉得它很有用。如果您不介意的话,请您将我的答案标记为已被接受的答案,然后如果您认为它最适合您的需要,您会这样做吗?谢谢是的,伙计…@robobear
SELECT semesterid,
       AVG( value ) AS TotalValue
FROM tbcourse
GROUP BY semesterid;
CREATE TABLE semesters (
  id INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  term_name VARCHAR(256) NOT NULL,
  term_year INT(8) NOT NULL
 );
CREATE TABLE courses (
  id INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(256) NOT NULL,
  semester_id INT(12) NOT NULL,
  credit_hours INT(4) NOT NULL,
  grade FLOAT,
  FOREIGN KEY (semester_id) REFERENCES semesters(id)
 );
SELECT
  sg.semester_id AS "Semester"
  ,sg.grade_points AS GPs
  ,sg.hours AS hours
  ,ROUND((sg.grade_points / sg.hours), 2) AS GPA
FROM (
  SELECT
    c.semester_id AS semester_id
    ,SUM(c.credit_hours + 0.0) AS hours
    ,SUM((c.grade * c.credit_hours) + 0.0) AS grade_points
  FROM courses AS c
  GROUP BY c.semester_id
) as sg  # sg ~ SemesterGrades;
SELECT
  ROUND((grades.grade_points / grades.hours), 2) AS GPA
FROM (
  SELECT
    c.semester_id AS semester_id
    ,SUM(c.credit_hours + 0.0) AS hours
    ,SUM((c.grade * c.credit_hours) + 0.0) AS grade_points
  FROM courses AS c
) as grades