MySQL内连接命名错误?

时间:2018-03-08 15:01:11

标签: mysql sql

http://sqlfiddle.com/#!9/e6effb/1

我试图在12月份为法国每个品牌的收入排名前十。 有2个表(第一个表有日期,第二个表有品牌,我试图加入它们)

我收到此错误"功能db_9_d870e5.SUM不存在。检查'功能名称解析和解决方案'参考手册中的部分"

我对Inner join的使用是否正确?

2 个答案:

答案 0 :(得分:0)

这是因为SUM之后你有一个额外的空格。请从

更改

SUM (o1.total_net_revenue)SUM(o1.total_net_revenue)

详细了解here

在更正后,您的查询仍有更多错误,因为您未在中间表order_id上选择i2,因此在此处进行了编辑:

SELECT o1.order_id, o1.country, i2.brand,
SUM(o1.total_net_revenue)
FROM orders o1
INNER JOIN (
    SELECT i1.brand, SUM(i1.net_revenue) AS total_net_revenue,order_id
    FROM ordered_items i1
    WHERE i1.country = 'France'
    GROUP BY i1.brand
    ) i2 
ON o1.order_id = i2.order_id AND o1.total_net_revenue = i2.total_net_revenue
AND o1.total_net_revenue = i2.total_net_revenue
WHERE o1.country = 'France' AND o1.created_at BETWEEN '2016-12-01' AND '2016-12-31'
GROUP BY 1,2,3
ORDER BY 4
LIMIT 10`

答案 1 :(得分:0)

- 编辑堆栈风扇是正确的,o2.total_net_revenue存在。我的困惑是因为数据结构在表之间重复了三列,包括正在寻找的一列。

您的SQL语句有几处错误:

<击> 1。您在外部select-SUM函数中引用了一个无效列。我相信你实际上是在i2.total_net_revenue之后。

  1. 表结构很糟糕,“重要”列(country,revenue,order_id)在两个表之间重复。我还希望收入列共享相同的名称,如果它们总是具有相同的值。在示例中,i1.net_revenue和o1.total_net_revenue之间没有区别。

  2. 在您的内连接中,您没有引用i1.order_id,这意味着您的“on”子句无法正确执行。

  3. 普罗蒂普: 当您遇到这样的问题时,请从查询中获取所有复杂的位,并首先使基本查询正常工作。然后添加你的功能。

    普罗蒂普: 在GROUP BY子句中,引用实际列,而不是列号。它使您的查询更加健壮。

    这是我最终的查询:

    SELECT o1.order_id, o1.country, i2.brand,
    SUM(i2.total_net_revenue) AS total_rev
    FROM orders o1
    INNER JOIN (
        SELECT i1.order_id, i1.brand, SUM(i1.net_revenue) AS total_net_revenue
        FROM ordered_items i1
        WHERE i1.country = 'France'
        GROUP BY i1.brand
        ) i2 
        ON o1.order_id = i2.order_id AND o1.total_net_revenue = i2.total_net_revenue
        AND o1.total_net_revenue = i2.total_net_revenue
    WHERE o1.country = 'France' AND o1.created_at BETWEEN '2016-12-01' AND '2016-12-31'
    GROUP BY o1.order_id, o1.country, i2.brand
    ORDER BY total_rev
    LIMIT 10
    
相关问题