首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL聚合查询?

MySQL聚合查询?
EN

Stack Overflow用户
提问于 2012-03-30 01:59:08
回答 3查看 47关注 0票数 2

我有以下mySQL代码:

代码语言:javascript
复制
SELECT 
      c.categoryId, 
      c.categoryName, c.categoryParent, 
      c.categoryDescription, 
      COUNT(p.productid) as totalProdsInCategory
    FROM categories as c
     LEFT JOIN normalproducts as p 
     ON c.categoryId = p.categoryid
WHERE c.categoryId = 41
    GROUP BY c.categoryId
    ORDER BY c.categoryParent ASC,  c.categoryName ASC

我希望能够包含另一个COUNT列。但这只能算作p.state = "active“的产品。这是我不正确的解决方案

代码语言:javascript
复制
SELECT 
      c.categoryId, 
      c.categoryName, c.categoryParent, 
      c.categoryDescription, 
      COUNT(p.productid) as totalProdsInCategory, 
      COUNT(q.productid) as totalActiveProdsInCategory
    FROM categories as c
     LEFT JOIN normalproducts as p 
     ON c.categoryId = p.categoryid
WHERE c.categoryId = 41
    GROUP BY c.categoryId
    ORDER BY c.categoryParent ASC,  c.categoryName ASC

有什么帮助吗?我不知道下一步该怎么走...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 02:03:07

您可以使用SUM (CASE WHEN p.state = "active" THEN 1 ELSE 0 END)来获取您要查找的计数。

代码语言:javascript
复制
SELECT 
      c.categoryId, 
      c.categoryName, c.categoryParent, 
      c.categoryDescription, 
      COUNT(p.productid) as totalProdsInCategory, 
      SUM (CASE WHEN p.state = "active" THEN 1 ELSE 0 END) totalActiveProdsInCategory
    FROM categories as c
     LEFT JOIN normalproducts as p 
     ON c.categoryId = p.categoryid
WHERE c.categoryId = 41
    GROUP BY c.categoryId
    ORDER BY c.categoryParent ASC,  c.categoryName ASC
票数 5
EN

Stack Overflow用户

发布于 2012-03-30 02:05:36

试试这个:

代码语言:javascript
复制
SELECT 
      c.categoryId, 
      c.categoryName, c.categoryParent, 
      c.categoryDescription, 
      COUNT(p.productid) as totalProdsInCategory, 
      SUM(IF(p.state='active',1,0)) as totalActiveProdsInCategory
    FROM categories as c
     LEFT JOIN normalproducts as p 
     ON c.categoryId = p.categoryid
WHERE c.categoryId = 41
    GROUP BY c.categoryId
    ORDER BY c.categoryParent ASC,  c.categoryName ASC

这与@Conrad的相似,但在我看来更简洁一些

票数 1
EN

Stack Overflow用户

发布于 2012-03-30 02:15:11

这是可行的,但可能不太符合左连接方法:

代码语言:javascript
复制
SELECT        
c.catId,c.catName,
COUNT(p.productId) as totalProdsInCategory,
(SELECT count(*) from product as p where p.catId=1 AND p.state='active') as totalActive
FROM cat as c      
LEFT JOIN product as p ON c.catId = p.catId 
WHERE c.catId = 1     
GROUP BY c.catId     
ORDER BY c.catName ASC 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9930811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档