【问题标题】:Select with a lot of tables选择很多表
【发布时间】:2017-12-12 20:22:39
【问题描述】:

我正在尝试查询销售报告,其中将显示销售代码、日期、产品数量(仅)、门票数量、总销售价值以及员工的姓名。 Click here to see the connection between the tables 我正在使用的查询不会返回错误,但即使 Sales 表上没有任何内容或即使它已满,也只返回一行

select sales.codv
, customers.name as customers
, concat(day(datav),'/',month(datav),'/',year(datav)) as date
, sum(prod_sal.amount) as 'products'
, count(tickets.codb) as 'tickets'
, sum(ifnull(products.preco,0) * ifnull(prod_sal.amount,0) + 
ifnull(tickets.price,0)) as 'total/€'
, employees.nome as employee
from sales
LEFT JOIN customers ON customers.codc=sales.codc
INNER JOIN employees ON employees.codf=sales.codf
LEFT JOIN prod_sal ON prod_sal.codv=sales.codv
LEFT JOIN products ON products.codp=prod_sal.codp
LEFT JOIN tickets ON tickets.codv=sales.codv

注意:datav 是销售日期

【问题讨论】:

  • 提示:GROUP BY.
  • 这不是一个提示,因为它有效。
  • 回答,以便我给你正确的答案。这将是你的第 36,783 个正确答案

标签: mysql select count sum left-join


【解决方案1】:

如果您不使用group by 子句,MySQL 将假定您要聚合与您的where 子句匹配的所有行。由于您没有 where 子句,这就是您数据库中的所有内容。

select 
  sales.codv
  , customers.name as customers
  , concat(day(datav),'/',month(datav),'/',year(datav)) as date
  , sum(prod_sal.amount) as 'products'
  , count(tickets.codb) as 'tickets'
  , sum(ifnull(products.preco,0) * ifnull(prod_sal.amount,0) + ifnull(tickets.price,0)) as 'total/€'
  , employees.nome as employee
from 
  sales
  LEFT JOIN customers 
    ON customers.codc=sales.codc
  INNER JOIN employees 
    ON employees.codf=sales.codf
  LEFT JOIN prod_sal 
    ON prod_sal.codv=sales.codv
  LEFT JOIN products 
    ON products.codp=prod_sal.codp
  LEFT JOIN tickets 
    ON tickets.codv=sales.codv
group by
  sales.codv
  , customers.name
  ,  concat(day(datav),'/',month(datav),'/',year(datav)) as date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    相关资源
    最近更新 更多