Mysql 还有别的吗?要使用的正确声明是什么(来自多个供应商的库存)

Mysql 还有别的吗?要使用的正确声明是什么(来自多个供应商的库存),mysql,sql,if-statement,Mysql,Sql,If Statement,我在phpmyadmin中有一个我所有供应商的数据库。我创建了一个php文件,每天将数据库中每个独特sku的最便宜库存和数量导出到csv。然而,目前它不包括任何没有库存的物品,然而,我希望。。。如果任何地方都没有库存,请为这些项目打印0 原始sql语句是(其中name=SKU): 我已经尝试了以下方法,但效果不理想: SELECT name,MIN(price) AS minPrice,IF(quantity > 0,quantity,'0') AS quantity FROM produ

我在
phpmyadmin
中有一个我所有供应商的数据库。我创建了一个php文件,每天将数据库中每个独特sku的最便宜库存和数量导出到csv。然而,目前它不包括任何没有库存的物品,然而,我希望。。。如果任何地方都没有库存,请为这些项目打印0

原始sql语句是(其中
name=SKU
):

我已经尝试了以下方法,但效果不理想:

SELECT name,MIN(price) AS minPrice,IF(quantity > 0,quantity,'0') AS quantity FROM products GROUP BY name

您需要条件聚合:

SELECT name, MIN(price) AS minPrice, coalesce(sum(quantity), 0) AS quantity 
FROM products
GROUP BY name;
查询的问题是
where
子句,它过滤掉
数量
0
的所有产品。你似乎真的想要这些


我已经包括了
coalesce()
以防万一
quantity
可以
NULL
。您的实际数据可能不需要它。

如果您正在寻找价格最低的产品数量,请尝试:

SELECT  name
,       price
,       coalesce(quantity,0) as quantity
FROM    products p1
WHERE   price = 
        (
        SELECT  min(price)
        FROM    products p2
        WHERE   p1.name = p2.name
        )

您不需要将
作为数量
。你得到了什么错误?我没有得到一个错误,相反,它只是没有做我打算做的事情,因为不知道要使用的确切语句。AS语句是必需的(我认为),因为这只是整个php文件的一个片段,它将继续使用print$row['XXX'],这取决于我希望它打印的行作为一个规则,当你发布这个和那个的“片段”时,你将得到你问题的“尖刻”答案。你看,你已经有了两个答案,来自排名靠前的男性,但仍然不能满足你对答案的需求。如果你需要帮助的话,我建议你以后要更加完整。好的,没问题,我没有意识到我没有提供足够的信息。还有什么我还没有包括在内的吗?很明显,我想要的是正确的代码,只是不知道如何用代码来表达。这些mySQL问题很难回答,但有一个名为sqlFiddle的服务,它允许您在“社区”类型设置中构建模式和查询,以便其他人可以更清楚地了解您的工作。您好,谢谢你的帮助,但这并不是我想要的,也似乎和我的第二次陈述一样。也就是说,在价格列中,它显示最便宜的价格,在数量列中,它显示的数量不是0,除非所有都是0,在这种情况下,它打印0。我想要的是:选择最便宜的价格,但仅当它有库存时,否则,选择下一个最便宜的价格,但再次选择仅当它有库存时。但如果任何地方都没有库存,则打印0。这有意义吗?再次感谢你的帮助
SELECT  name
,       price
,       coalesce(quantity,0) as quantity
FROM    products p1
WHERE   price = 
        (
        SELECT  min(price)
        FROM    products p2
        WHERE   p1.name = p2.name
        )