【问题标题】:COUNT total of group by mysqlCOUNT 组的总数 by mysql
【发布时间】:2016-12-21 08:08:37
【问题描述】:

这个 mysql 查询为我提供了按天和小时分组的产品销售数量(total 和 total_staff)。我想要每个产品的 total 和 total_staff 的总和(不按任何东西分组,按 id 分组)。我可以在同一个查询中执行此操作吗?

SELECT p.name, p.color, DATE(date_create) as jour,HOUR(date_create) AS h,
SUM(CASE WHEN s.staff=0 THEN 1 ELSE 0 END) as total,
SUM(CASE WHEN s.staff=1 THEN 1 ELSE 0 END) as total_staff
FROM manifsSubCategories msc
LEFT JOIN products_subCategories psc ON msc.id=psc.manifSubCategory_id
LEFT JOIN sales s ON psc.product_id=s.product_id
LEFT JOIN products p ON psc.product_id=p.id
LEFT JOIN manifsCategories ON manifCategory_id=manifsCategories.id
WHERE manifCategory_id=1 AND s.category_id=1 GROUP BY jour,h ORDER BY p.id DESC 

【问题讨论】:

    标签: mysql count group-by


    【解决方案1】:

    只需省略其他列:

    SELECT p.name,
        SUM(CASE WHEN s.staff=0 THEN 1 ELSE 0 END) as total,
        SUM(CASE WHEN s.staff=1 THEN 1 ELSE 0 END) as total_staff
    FROM manifsSubCategories msc
    LEFT JOIN products_subCategories psc ON msc.id=psc.manifSubCategory_id
    LEFT JOIN sales s ON psc.product_id=s.product_id 
    LEFT JOIN products p ON psc.product_id=p.id
    LEFT JOIN manifsCategories ON manifCategory_id=manifsCategories.id
    WHERE manifCategory_id=1 AND s.category_id=1
    GROUP BY p.name
    ORDER BY p.id DESC
    

    顺便说一句 - 您的 WHERE 子句是错误的。您正在按LEFT JOIN 的表进行过滤,这将由于NULL 比较而将您的联接变成inner join。
    左联接右表上的条件只能放在ON 内子句。

    【讨论】:

    • 谢谢!但是我可以只使用第一个查询吗,即我想在右边有一个新列,让我们在最后说 all_total 和 all_total_staff 。如果我在每一行上都有相同的结果,这并不重要。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 2019-10-20
    相关资源
    最近更新 更多