聚合SQL函数; C#中的AVG

时间:2017-03-06 05:56:47

标签: c# mysql aggregate-functions

我有2张桌子。学生和考试。我想提出一个查询,该查询获得高于普通test_results的学生的学生姓名(名字和姓氏)。

我认为我当前的查询是错误的。也许是因为我没有加入这两张桌子?这是我的查询(在C#中)

   MySqlCommand cmd = new MySqlCommand("SELECT student.studentFirstName, student.studentLastName, test.test_results FROM student, test WHERE test_results > (SELECT AVG(test_results) FROM test; ");
  

您的SQL语法错误

如果我必须加入2个表格。我在两个表中都有一个名为studentID的列

2 个答案:

答案 0 :(得分:1)

你应该看看INNER / LEFT JOIN。 https://www.w3schools.com/sql/sql_join_inner.asp

答案 1 :(得分:1)

错误是由于缺少封闭括号。您应该在2017-03-05 10:20:30.000 2017-03-06 10:20:30.000 之后使用括号括起来。

但您的查询本身是错误的,需要使其正确。正确的查询将是:

    SELECT
  dbo.Areas.AreaName,
  dbo.Brands.BrandName,
  dbo.Orders.OrderID,
  dbo.Orders.OrderStatus,
  dbo.Customers.CustomerName,
  dbo.Customers.CustomerID,
  dbo.Customers.Phone,
  dbo.Customers.Mobile,
  dbo.Orders.OrderDate,
  dbo.Outlets.OutletName,
  dbo.Users.FirstName,
  dbo.Users.LastName,
  dbo.Sources.SourceName,
  SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge) * Orders.Discount / 100) AS Amount,
  ReceivedOrders.ReceivingDate
FROM dbo.Orders
INNER JOIN dbo.Customers
  ON dbo.Orders.CustomerID = dbo.Customers.CustomerID
INNER JOIN dbo.Outlets
  ON dbo.Orders.OutletID = dbo.Outlets.OutletID
INNER JOIN dbo.Users
  ON dbo.Orders.UserID = dbo.Users.UserID
INNER JOIN dbo.Sources
  ON dbo.Orders.SourceID = dbo.Sources.SourceID
INNER JOIN dbo.OrderDetails
  ON dbo.OrderDetails.OrderID = dbo.Orders.OrderID
INNER JOIN dbo.Brands
  ON dbo.Brands.BrandID = dbo.Outlets.BrandID
INNER JOIN dbo.Areas
  ON dbo.Areas.AreaID = dbo.Customers.AreaID
LEFT JOIN dbo.ReceivedOrders
  ON dbo.ReceivedOrders.OrderID = dbo.Orders.OrderID
WHERE  BETWEEN OrderDate AND DATEADD(HOUR, 16, OrderDate) and OrderDate=GETDATE()
GROUP BY dbo.Orders.OrderID,
         dbo.Orders.OrderStatus,
         dbo.Customers.CustomerName,
         dbo.Customers.CustomerID,
         dbo.Customers.Phone,
         dbo.Customers.Mobile,
         dbo.Orders.OrderDate,
         dbo.Outlets.OutletName,
         dbo.Users.FirstName,
         dbo.Users.LastName,
         dbo.Sources.SourceName,
         dbo.Orders.DeliveryCharge,
         Orders.Discount,
         dbo.Brands.BrandName,
         dbo.Areas.AreaName,
         ReceivedOrders.ReceivingDate
ORDER BY dbo.Orders.OrderID

如果你想拥有JOIN风味的解决方案,你可以这样做:

FROM test
相关问题