mysql - 在 GROUP BY() 之后过滤数据,反之亦然?

标签 mysql sql database

下面是MySQL中的表

Table:ShopInfo

ShopCode     ShopName
--------     -------
X            Xylophon
Y            Yellow
Z            Zoota
K            Kite

Table: Income

Shop     Date           Earnings
-----    ----------     --------
X        2014-10-17     4000
Y        NULL           NULL
Y        2014-11-09     5000
Y        2014-11-18     3000
Y        2014-12-05     2000
Z        2014-12-25     6000
K        NULL           NULL

我想仅在 11 月份查找每家商店的总收入,Null 收入将被替换为零。结果表将是

ShopName    NovEarn
--------    -------
Yellow      8000
Kite        0 

这就是我正在做的:

SELECT ShopInfo.ShopName, IFNULL( SUM(Income.Earnings), 0 ) AS NovEarn
FROM Income
JOIN ShopInfo ON Income.Shop=ShopName.ShopCode
GROUP BY Income.Shop
HAVING (MONTH(Income.Date)=11 AND YEAR(Income.Date)=2014) OR Date IS NULL
ORDER BY NovEarn DESC

它给了我

ShopName    NovEarn
--------    -------
Yellow      10000
Kite        0

即所有月份的收入总和。我做错了什么?

最佳答案

尝试放置 having 子句和 where 子句:

SELECT ShopInfo.ShopName, IFNULL( SUM(Income.Earnings), 0 ) AS NovEarn
FROM Income
JOIN ShopInfo ON Income.Shop=ShopName.ShopCode
WHERE (MONTH(Income.Date)=11 AND YEAR(Income.Date)=2014) OR Date IS NULL
GROUP BY Income.Shop
ORDER BY NovEarn DESC

关于mysql - 在 GROUP BY() 之后过滤数据,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21884027/

相关文章:

mysql - 创建具有特定字符集和排序规则的 MySQL 数据库

java - 使用 Java 将图像插入 MS Access 数据库的 SQL

java - 将java程序连接到数据库的类(接受参数)

mysql - 选择带有尾部斜杠的近重复项

Mysql - 将行列值从一个表复制到另一个表(2次),具有不同的行值

mysql - 为什么 LEFT OUTER JOIN 会减少左表中的行?

mysql - 使用其他列的数据(MySQL 中的 UPDATE)

sql - [Postgres] 的平均/组表现

mysql - Google App Engine 中的 Datastore 与 Cloud SQL

database - 配置 Redis 自动使用磁盘