【问题标题】:Group By, Having and Count分组依据、拥有和计数
【发布时间】:2014-04-08 04:15:40
【问题描述】:

我有以下 sql 查询:

    SELECT * FROM `products_groups` `productGroup` 
    LEFT OUTER JOIN `products` `products` ON (`products`.`product_group_id`=`productGroup`.`id`) 
    GROUP BY productGroup.name 
    HAVING (COUNT(products.id) > 0)

能否请您告诉如何更改查询以返回所有结果中的总行数?

附言

SELECT count(*)... 在这种情况下不起作用

【问题讨论】:

  • 不清楚,你的意思是要返回所有的productGroup.name,甚至products.id = 0的组?

标签: mysql sql


【解决方案1】:
SELECT COUNT (rowTotal) as total 
  FROM (
      SELECT SUM(1) as rowTotal
      FROM `products_groups` `productGroup` 
      LEFT OUTER JOIN `products` `products` 
      ON (`products`.`product_group_id`=`productGroup`.`id`) 
      GROUP BY productGroup.name HAVING (COUNT(products.id) > 0)
  )as groupRows

【讨论】:

    【解决方案2】:

    代替 SELECT * 的 COUNT(*) 将不起作用,因为 count(*) 将应用于每个组。因此,您的结果将返回为:

    GROUP 1 - 11 行 第 2 组 - 2 行 等等。

    您需要将 COUNT(*) 应用于整个查询而不是组,如下所示:

        SELECT COUNT(*) FROM
        (SELECT 1 FROM `products_groups` `productGroup` 
        LEFT OUTER JOIN `products` `products` ON (`products`.`product_group_id`=`productGroup`.`id`) 
        GROUP BY productGroup.name 
        HAVING (COUNT(products.id) > 0))
    

    【讨论】:

      【解决方案3】:

      要返回您的组总计下的产品总数,Union 类似查询,仅排除 Group By 并使用 Inner Join 排除没有产品的产品组(就像您的 Having 子句一样) :

      SELECT
        productGroup.name as ProductGroup,count(products.id) as ProductCount
      FROM `products_groups` `productGroup` 
          LEFT OUTER JOIN `products` `products`
              ON (`products`.`product_group_id`=`productGroup`.`id`) 
      GROUP BY productGroup.name 
      HAVING (COUNT(products.id) > 0)
      UNION ALL
      SELECT
          'Total' ProductGroup,count(products.id) ProductCount
      FROM `products_groups` `productGroup` 
          INNER JOIN `products` `products`
              ON (`products`.`product_group_id`=`productGroup`.`id`)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2018-07-28
        • 2021-04-11
        • 1970-01-01
        相关资源
        最近更新 更多