【问题标题】:MySQL "ambiguous field list" and daily average calcMySQL“模糊字段列表”和每日平均计算
【发布时间】:2018-03-08 20:17:58
【问题描述】:
CREATE TABLE table1(
    City CHAR(10),
    Sales INT NOT NULL,
    Sale_date DATE NOT NULL,
    First_order INT NOT NULL
);

INSERT INTO table1 VALUES
("Paris",2000,'2018-01-02',1),
("Munich",2000,'2018-02-17',1),
("Paris",2000,'2018-03-31',2),
("Paris",1000,'2017-01-01',2),
("Paris",1000,'2017-02-02',1),
("Paris",1000,'2017-03-02',1),
("Paris",10000,'2018-01-02',2),
("Munich",1000,'2017-01-01',1);

http://sqlfiddle.com/#!9/f0f0cb/2

SQL 新手,我从这个查询中得到一个错误“字段列表中的列 'City' 不明确”是别名/内部连接的问题吗?

目标:

  1. 每个城市的日均销售额(2018 年第一季度)
  2. 2017 年第一季度与 2018 年第一季度的同比销售额增长
  3. 每日平均新客户数(新客户在“First_order”列中的值为 1,回头客为 2)

在第三点特别是我迷路了,我应该用什么来计算这个?计数功能?

【问题讨论】:

  • 在 City 字段前添加 table1 前缀
  • 你还没有定义你的主键。

标签: mysql sql


【解决方案1】:

如果查询中有多个表,请限定所有列引用。也就是说,显示它们的来源。

所以:

SELECT t1.City, AVG(t1.Sales) as q1_daily_avg_Sales, 
       (SUM(t1.Sales) - tt1.q1_2017_Sales) / tt1.q1_2017_Sales AS Sales_vs_SPLY
FROM table1 t1 INNER JOIN
     (SELECT t1.City, SUM(t1.Sales) AS q1_2017_Sales
      FROM table1 t1
      WHERE t1.Sale_date BETWEEN '2017-01-01' AND '2017-03-31'
      GROUP BY t1.City
     ) tt1
     ON t1.City = tt1.City
WHERE t1.Sale_date BETWEEN '2018-01-01' AND '2018-03-31'
GROUP BY t1.City;

Here 是 SQL 小提琴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 2021-07-30
    • 2019-03-07
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多