Mysql Sum 不适用于单行结果

标签 mysql database sum left-join inner-join

我有这个查询

SELECT product.product_id, 
                    product.product_category_id, 
                    product.product_subcategory_id, 
                    product.product_brand_id, 
                    product.product_model_id, 
                    product.product_retail_price, 
                    product.product_wholesale_price, 
                    product.product_quoted_price, 
                    product.product_aquoted_price, 
                    product.product_dquoted_price, 
                    (SELECT IFNULL(SUM(product_sold.product_quantity), 0) FROM product_sold WHERE product_sold.product_id = product.product_id 
                    AND product_sold.product_sold_approved = 1
                    AND product_sold.product_sold_approved_time > $start_timestamp) AS num_product_sold,
                    product_brand.brand_name, 
                    product_model.model_name, 
                    product_subcategory.subcategory_name,
                    (SELECT IFNULL(SUM(product_stock.product_quantity),0) FROM product_stock WHERE product_stock.product_id = product.product_id) AS num_product_stock
    FROM product
        INNER JOIN product_brand 
            ON product_brand.brand_id = product.product_brand_id
        INNER JOIN product_model 
            ON product_model.model_id = product.product_model_id AND product_model.year_from <= $year AND product_model.year_to >= $year
        INNER JOIN product_subcategory 
            ON product_subcategory.subcategory_id = $subcategory
        GROUP BY product.product_id
        ORDER BY num_product_sold DESC, num_product_stock DESC, product_brand.brand_name, product_model.model_name

问题是,当产品库存在库存表上只有一行时,它返回 0,我会在之后执行此查询,但问题是我需要按库存数量订购。有什么方法可以对产品数量求和,即使数据库中只有一行?

最佳答案

我已经尝试过你提到的方法,但我没有发现任何问题:

    -- create tables
    create table product(
        id number not null,
        name varchar2(50) not null,
        quantity number default 0 not null);

    create table product_sold(
        id number not null,
        product_id number not null,
        quantity number default 0 not null);    

    -- insert some data    
    insert into product values(1, 'porsche', 55);
    insert into product values(2, 'bmw', 18);
    insert into product values(3, 'airbus A330', 2); 


    insert into product_sold values(100,1, 3);
    insert into product_sold values(101,1, 15);
    insert into product_sold values(102,2, 6);

    commit;

    -- start querying

    SELECT product.id,product.name,(SELECT COALESCE(SUM(ps.quantity), 0) FROM product_sold ps WHERE ps.product_id = product.id) sum_sold
    FROM  product;
ID               NAME                 SUM_SOLD                              
1                porsche              18                                    
2                bmw                  6                                     
3                airbus A330          0                                     

关于Mysql Sum 不适用于单行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22927784/

相关文章:

mysql - 一篇MySQL Explain解读及提升查询响应时间的建议

database - 2 个关于数据库开发哲学和最佳实践的问题

java - JAVA中有什么方法可以对元素求和吗?

mysql - 在 SQL 中从多到少排序值

Mysql 字段值中逗号计数

php - 计入选择查询

ios - coredata 中一列所有值的总和

ruby-on-rails - 通过 rake 任务删除 Heroku (Rails 3.1) 上的旧记录

sql - ruby rails : Best way to Iterate a Relation or Associations

c++ - std::vector<Object> 成员 C++ 的总和