【问题标题】:mysql count subtables and its subtables for its main tablemysql count subtables and its subtables for its main table
【发布时间】:2011-11-01 23:05:16
【问题描述】:
Table 1 - Category

id | name

Table 2 - subcat

id | cid(category.id) | name

Table 3 - products

id | cid(category.id) | sid(subcat.id) | name

select a.* , count(b.id) as total
         from category a left join
         subcategory b on a.id=b.cid 
         group by a.id order by a.name

这给出了每个类别的子类别计数

我可以单独运行产品,这样我就可以获得每个类别的产品数量

我想要的是子类别的数量和每个类别的产品数量。如何形成查询?

应该是catename、count of (sub categories)和count of (products)

【问题讨论】:

  • 这有点讨厌的表格设计 - 在 products 表格中包含主要类别 id 和子类别 id 可能会导致不一致 - 类别/子类别中的产品不相关。
  • 那么你有什么建议......只有产品表中的子类别 id 就足够了,不是吗?

标签: mysql join


【解决方案1】:

因为您可能有给定类别的子类别,但实际上没有针对此类子类别列出的产品,您可能无法获得预期的结果...这应该适合您

select a.id,
       a.name, 
       BySubCat.AvailableSubCategories,
       ByProduct.ActualSubCats,
       ByProduct.ProductCount
   from
      category a

         left join
            ( select cid, count(*) as AvailableSubCategories
                 from subcat
                 group by cid ) BySubCat
            on a.id = BySubCat.cid

         left join
            ( select cid,
                     count( distinct sid ) as ActualSubCats,
                     count(*) ProductCount
                 from
                    products
                 group by
                    cid ) ByProduct
            on a.id = ByProduct.cid
  order by
     a.name

【讨论】:

  • aaww...感谢您的回复,但我怎么能弥补这样的疑问......如何弥补这样的疑问......实践是完美的,不是......我可以掌握任何概念,但我无法跟踪 sql...您对此的建议
  • @JayapalChandran,有时,人们试图在一个查询中过多地咀嚼......这就是为什么我试图将事情分解成独特的元素。在这种情况下,两种不同类型的计数来自不同的来源。单独的查询进行各自的聚合并加入共同的“id”对我来说最有意义。希望这个查询对你有用。了解较小的查询,然后看看它们如何适应整个结果集。
【解决方案2】:

试试这个:

select c.name,count(sc.id),count(sub.pcount)
from subcat sc
inner join
(
    select p.sid as subid, count(p.id) as pcount from Products p 
    inner join subcat sc on sc.id = p.sid
    group by p.sid
) sub
on sub.subid = sc.id
inner join Category c on c.id = sc.cid
group by sc.id,sub.pcount

【讨论】:

  • aaww...感谢您的回复,但我怎么能弥补这样的疑问......如何弥补这样的疑问......实践使完美不是......我可以掌握任何概念,但我无法跟踪 sql...您对此的建议
猜你喜欢
  • 2021-02-18
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多