gpt4 book ai didi

mysql - 使用 WHERE 时如何将 “zero”/“0” 结果包含在 COUNT 中?

转载 作者:行者123 更新时间:2023-11-29 19:45:13 25 4
gpt4 key购买 nike

我正在尝试执行一个查询,该查询将返回 0 COUNT 以及我的新员工的月与月之间的销售总数。

SELECT recruits.pin, recruits.first_name, recruits.surname, sales.sale_date,
COUNT(sales.pin) AS 'TotalSales' FROM sales
LEFT JOIN recruits ON sales.pin = recruits.pin
WHERE sales.sale_date BETWEEN '$sYear1-$sMonth1-01' AND '$sYear2-$sMonth2-31'
AND recruits.country = '$sCountry'
GROUP BY recruits.pin
ORDER BY COUNT(sales.pin) DESC;

这仅输出所选月份的销售总数。并且不会显示任何0值,并且不会显示所有新兵。如果我删除 WHERE 语句,它会输出所有招聘人员,但它不会按月过滤,因此我无法按月过滤销售数量。

任何帮助将不胜感激。

最佳答案

您需要将 recruits 的条件移至 on 子句。但如果您想要所有招聘(按国家/地区过滤),那么招聘应该是LEFT JOIN中的第一个表。

我会把它写成:

SELECT r.pin, r.first_name, r.surname, s.sale_date,
COUNT(s.pin) AS TotalSales
FROM recruits r LEFT JOIN
sales s
ON s.pin = r.pin AND
s.sale_date BETWEEN '$sYear1-$sMonth1-01' AND '$sYear2-$sMonth2-31'
WHERE r.country = '$sCountry'
GROUP BY r.pin
ORDER BY COUNT(s.pin) DESC;

注释:

  • 表别名使查询更易于阅读和编写。
  • 通常情况下,您希望在 GROUP BY 中包含所有未聚合的列。据推测,pinrecruits 中的主键/唯一键,因此这是一种不包含列也可以的情况。
  • sale_date(第二个表)的条件应位于 on 子句中。
  • country(第一个表)的条件应位于 where 子句中。

关于mysql - 使用 WHERE 时如何将 “zero”/“0” 结果包含在 COUNT 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41059049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com