Mysql 将变量传递到子查询

Mysql 将变量传递到子查询,mysql,Mysql,我希望从每个项目中提取所有客户的报价,如果他们有多个报价,我希望平均值 我有以下疑问: SELECT @projectid := projects.id AS projectid, (SELECT SUM(`offers`) FROM (SELECT AVG( `price` ) AS `offers` FROM `sales` WHERE `sales`.`projectid` = @projectid AND `sales`.`active` = 'yes'

我希望从每个项目中提取所有客户的报价,如果他们有多个报价,我希望平均值

我有以下疑问:

SELECT
@projectid := projects.id AS projectid,
(SELECT
  SUM(`offers`) FROM
  (SELECT AVG( `price` ) AS `offers`
    FROM `sales`
    WHERE `sales`.`projectid` = @projectid
    AND `sales`.`active` = 'yes'
    GROUP BY `sales`.`clientid`
  ) AS `average`
) AS `outstanding`
FROM projects
WHERE
projects.active = 'yes'
ORDER BY outstanding ASC 
我的问题是@projectid没有被传递到子查询中,我不知道该如何解决这个问题


谁能给我一些建议吗?

记住SQL是一种声明性语言,而不是命令式语言。许多问题可以通过使用和子查询而不使用“变量”来解决。所以

。。。我不太清楚——但你只需要“每个项目的平均报价总和是每个客户提供的”,类似这样的东西就可以做到:

SELECT S.projectid, SUM(offers) FROM
  (
    SELECT projectid, clientid, AVG(price) as offers FROM sales WHERE active = 'yes'
    GROUP BY projectid, clientid
  ) AS S 
JOIN projects on S.projectid = projects.id
AND projects.active = "yes"
GROUP BY projectid

请参见

我没有详细介绍您的整个查询,但是为什么不在子查询中使用
projects.id
而不是
@projectid
变量呢?因为这是一个相当复杂的查询,您应该提供一个(测试)schema in,并在您的问题中清楚地显示测试架构查询的预期输出。我不知道这是否是因为它在查询的其余部分之前运行子查询,但当我尝试使用projects.id时,它只返回#1054-未知列“project.id”in“where子句”Yes。在内部查询中必须有一个projectd列。请显示其他表格定义。否则会更复杂。@FredrikSetterqvist根据您的查询判断,它应该是projectS.id,而不是project.id。缺少的“s”将导致您描述的错误。不,我担心这不起作用,因为项目不在输出中分组。我每个项目只需要一行我知道了,也许吧。你想要“每个项目的平均总报价?是的,但仅当客户有多个报价时才应使用平均值。在提交的示例中,项目1和项目2的费用均为15000美元。一个虚构的例子可能是项目1有来自3个客户的4笔销售。如果客户A的报价为10000,客户B的报价为10000,客户C的报价为5000。“我应该说21000。”弗雷德里克塞特克维斯特谢谢你。现在干净多了。我已经根据你之前的评论修改了我的答案(和链接)。最后,我达到了所需的15000:d感谢您的帮助,但我担心它更复杂,这只是Projects表中更大查询的一小部分,因此我认为我需要坚持基本语法,即在最后一个from station中包含Projects,但我会看看我是否能够使它工作。。。