我不能在标题部分更具体,但我想为我做一些有点复杂的事情。 我以为我做到了,但事实证明它是有缺陷的。

我有三个表如下:

ProjectTable

  • idProject
  • 标题
  • idOwner

OfferTable

  • idOffer
  • idProject
  • idAccount

AccountTable

  • idAccount
  • 用户名

现在在一个查询中,我的目标是列出所有项目中提供的最多优惠,并且在查询中我还想获得详细信息,例如所有者的用户名,提供者的用户名*等等。所以我不必再次查询每个项目。

这是我的破解查询,这是我对GROUP BY的第一次实验,我可能不太明白。

SELECT Project.addDate,Project.idOwner ,Account.Username,Project.idProject,
    Project.Price,COUNT(Project.idProject) as offercount 
FROM Project 
INNER JOIN Offer 
    ON Project.idProject= Offer.idProject 
INNER JOIN Account 
ON Account.idAccount = Project.idOwner  
GROUP BY Project.addDate,Project.idOwner,
    Account.Username,Project.idProject,Project.Price 
ORDER BY addDate DESC

*:我写道,我没想到我只是想提供一些额外的信息,这要归功于Hosam Aly。

#1楼 票数:7 已采纳

试试这个(针对没有优惠的项目进行修改):

SELECT
  Project.addDate,
  Project.idOwner,
  Account.Username,
  Project.idProject,
  Project.Price,
  ISNULL(q.offercount, 0) AS offercount
FROM
  (
    SELECT
      o.idProject,
      COUNT(o.idProject) as offercount
    FROM Offer o
    GROUP BY o.idProject
  ) AS q
  RIGHT JOIN Project ON Project.idProject = q.idProject
  INNER JOIN Account ON Account.idAccount = Project.idOwner
ORDER BY addDate DESC

#2楼 票数:1

我可能会稍微切换一下这个问题:

select p.addDate,
  p.idOwner,
  a.Username,
  p.idProject,
  p.price,
  o.OfferCount
from project p
left join
(
  select count(*) OfferCount, idproject
  from offer
  group by idproject
) o
  on p.idproject = o.idproject
left join account a
  on p.idowner = a.idaccount

通过这种方式,您可以通过projectid获取count ,而不是基于您正在分组的所有其他字段。 我也在使用LEFT JOIN ,如果其他表中不存在projectid或其他id,您仍将返回数据。

#3楼 票数:1

你的问题有点模糊,但这里有一些指示:

  • 列出“提供最多报价”的项目, ORDER BY offercount
  • 您实际上是在查询项目,因此您应该首先在其他字段之前将GROUP BY Project.idProject
  • 您正在查询每个项目的优惠数量,但您询问优惠详情。 要求将两条信息放在一起真的没有意义(语法方面)。 如果您想获得结果的每个记录中重复的要约总数,以及要约信息,您将必须使用内部查询。

内部查询可以在FROM子句中进行,如其他答案所示,也可以直接在SELECT子句中进行,如下所示:

SELECT Project.idProject,
       (SELECT COUNT(Offer.idOffer)
          FROM Offer
         WHERE Offer.idProject = Project.idProject
        ) AS OfferCount
  FROM Project

  ask by EralpB translate from so

未解决问题?本站智能推荐:

2回复

从SQL中的JOIN获取数据

抱歉,这个问题的名称太乱了,这是我的第一个SQL。 有谁知道如何获取已售出最大数量产品的订单的OrderID ? 到目前为止,这是我的代码: 当我说MAX(OrderID)我得到的是销售产品的最高编号,而不是销售最高数量的产品的实际编号。 这是我有关SQL的第一个问题,
1回复

SQL年初至今报告,涉及3个表

我正在尝试创建一个年初至今的报告,该报告列出所有客户以及自年初以来当前日期以来所有发票的总额。 我还想从预算表中加入相同的总计列,以便他们能够比较实际与预算。 我能够将客户加入到发票中并正确地获取其总额,但是当我加入预算表时,我无法获得正确的值。 tbl_Clients -ID u
7回复

如何加速涉及count的SQL Server查询(distinct())

我有一个看似简单的SQL Server查询,比我预期的要花费更长的时间。 'guid'是varchar(64)NULL 'url'是varchar(900)NULL guid和url有一个索引。 'listens'表中有超过700万行,其中17,000行与相关网址相匹配
2回复

SQL查询与SQL子查询

大家好,我编写了以下查询,以合并3个表的结果( tblQuestions,tblReplies,tblTechnology并显示所需结果,如下所示) 这给了我以下预期的结果,但是在某些要显示数据的字段上为NULL 代替NULL我需要提取tblQuestions存在的一些数据,也有
2回复

优化SQL查询sql

我还需要帮助来加快此查询的速度,在LIVE数据库上花费25分钟,在TEST数据库上花费1秒。 这是经过一些修改后,最初我要查询数据库服务器数百次,以使用while循环为主要查询的每一行从php页中获取数据,然后尝试使用temp表创建一个过程以返回数据,我在45分钟后取消了执行。 所以我尝
3回复

使用group by和join子句进行SQL Server查询性能调优

我们一直在遇到关于工作的性能问题,幸运的是我发现查询导致缓慢。 迭代地调用此特定查询很多次会降低性能。 Student表有8百万条记录, Student_temp每次在迭代过程中接收5-20条记录。 Student表具有复合主键( id和name ), sno = Student
1回复

SQL查询结果问题

该查询用于获取某些客户的余额 出来我得到 问题与销售发票#13 20 176有关,应该对发票借方进行求和并显示余额 所以马上就应该像这样
10回复

带条件的 SQL 插入查询

我试图在满足条件时将值插入表的 1 列。 注意:该表已包含所有列的数据,但 1 为空。 我想根据 WHERE 子句在这 1 列中插入值。 我有这个查询: 我得到一个例外: WHERE 关键字附近的语法不正确 我可以使用 UPDATE 来做到这一点: 但想知道为什么 INSERT