【问题标题】:Multiply output of subquery (MySQL)子查询的乘法输出(MySQL)
【发布时间】:2023-01-20 02:29:43
【问题描述】:

我正在尝试将子查询的结果与“主”查询中的字段相乘。请参阅以下示例:

表:订阅

  • 编号
  • 标题
  • 价格

表:用户

  • subscription_id
SELECT 
    subscriptions.id,
    subscriptions.title,
    (select count(*) from users where users.subscription_id = subscriptions.id) AS qty
    SUM(qty * subscriptions.price) AS total
FROM subscriptions

这给出了错误Unknown column 'qty' in 'field list'。所以看起来子查询的结果在 SELECT 字段中不可用。在搜索 StackOverflow 后,我发现了一些相同的问题,看来我需要将子查询从 select 移动到 JOIN。这看起来很简单,但我无法修改自己的查询以像这样工作。谁能把我推向正确的方向?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    不要将子查询放在 SELECT 列表中,加入它。

    SELECT s.id, s.title, u.qty, s.price * u.qty AS total
    FROM subscriptions AS s
    JOIN (
        SELECT subscription_id, COUNT(*) AS qty
        FROM users
        GROUP BY subscription_id
    ) AS u ON s.id = u.subscription_id
    

    【讨论】:

    • 太好了,非常感谢!我注意到 JOIN 也比在 SELECT 中使用子查询更快(在我的例子中)。
    【解决方案2】:

    几乎是对的。

    SELECT 
        s.id,
        s.title,
        SUM(s.price * (select count(*) from users u where u.subscription_id = s.id)) AS total
    FROM subscriptions s
    GROUP BY s.id, s.title
    

    【讨论】:

    • 很近..!谢谢您的帮助!
    • 假设s.id 是主键,则不需要SUMGROUP BY,因为每组只有一行。
    【解决方案3】:

    我试图解决您的查询,检查它

    https://dbfiddle.uk/xrMrT7Y4

    我不知道为什么有人删除了我的答案。我在这里发现您的查询中的问题是您没有对聚合函数进行分组,如果您正在比较 ID,那么应该考虑两个表。 @文泽

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多