Mysql 从3个表之间的关系导出数据,并在单个查询中使用函数

Mysql 从3个表之间的关系导出数据,并在单个查询中使用函数,mysql,sql,Mysql,Sql,我写作是因为我有三张桌子 客户id、名、姓 sales1 id、客户id、价格、销售日期 sales2 id、客户id、价格、销售日期 我需要做一个查询,按客户只导出一行,其中包含销售数量、两个表的销售总额和上次销售日期。所有这些东西都在两个日期之间导出 我尝试了一个联盟,但我无法获得客户数据 Select * from sales1 where sale_date >=DATE(DATE_FORMAT('2001-04-1','%Y-%m-%d')) and sale_dat

我写作是因为我有三张桌子

客户id、名、姓

sales1 id、客户id、价格、销售日期

sales2 id、客户id、价格、销售日期

我需要做一个查询,按客户只导出一行,其中包含销售数量、两个表的销售总额和上次销售日期。所有这些东西都在两个日期之间导出

我尝试了一个联盟,但我无法获得客户数据

Select *
from sales1
where sale_date >=DATE(DATE_FORMAT('2001-04-1','%Y-%m-%d'))
      and sale_date<=DATE(DATE_FORMAT('2010-04-1','%Y-%m-%d'))
union
Select *
from sales2
where sale_date >=DATE(DATE_FORMAT('2001-04-1','%Y-%m-%d'))
      and sale_date<=DATE(DATE_FORMAT('2010-04-1','%Y-%m-%d')) 
在此之后,我尝试了sales表之间的内部联接,但得到了一个具有重复值的表

Select * from costumer 
inner join sales1 on costumer.cliente_id = sales1.cliente_id 
inner join sales2 on costumer.cliente_id = sales2.cliente_id 
where (sales1.sale_date >=DATE(DATE_FORMAT('2001-04-1','%Y-%m-%d'))
    and sales1.sale_date<=DATE(DATE_FORMAT('2010-04-1','%Y-%m-%d')))
    and (sales2.sale_date >=DATE(DATE_FORMAT('2001-04-1','%Y-%m-%d'))
    and sales2.sale_date<=DATE(DATE_FORMAT('2010-04-1','%Y-%m-%d')));
所以我有两个问题:

做一个查询,我可以得到所有正确的数据 在查询中添加一个函数,该函数仅按客户的行导出两个表中的销售数量、价格总和和上次销售日期。
我需要在一个查询中导出MySQL,这是一个挑战。请原谅我英语不好

我相信您正在寻找的是:

SELECT
    sales.id,
    COUNT(sales.sales_id) AS sales_count,
    SUM(sales.sales_price) AS price_sum,
    MAX(sales.sales_date) AS last_sale
FROM
    (SELECT
        c.id,
        s1.id AS sales_id,
        s1.price AS sales_price,
        s1.sale_date AS sales_date
     FROM
        customer c
        INNER JOIN sales1 s1 ON c.id = s1.customer_id
     UNION
     SELECT
       c.id,
       s2.id AS sales_id,
       s2.price AS sales_price,
       s2.sale_date AS sales_date
     FROM
      customer c
      INNER JOIN sales2 s2 ON c.id = s2.customer_id) AS sales
WHERE
    sales.sales_date >= '2001-04-01' AND sales.sales_date <= '2010-04-01'
    AND sales.sales_date >= '2001-04-01' AND sales.sales_date <= '2010-04-01'
GROUP BY
    sales.id;

销售日期>='2001-04-01'有什么问题?除此之外,如果你愿意,考虑以下简单的两步行动:1。如果您还没有这样做,请提供适当的DDL和/或SQLFIDLE,以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供与步骤1中提供的信息相对应的所需结果集。这可以解决我的问题,但仍然有一个错误,这是number os sales的结果,销售总额比预期多了一个。@SchwartsHiddwnbroug我用正确的结果更新了我的查询。我想当我睡2小时的时候就会发生这种情况。是显示结果的sql小提琴。