【问题标题】:How do I amend MySQL query to count the number of times a value appears in a DB table/result?如何修改 MySQL 查询以计算值出现在数据库表/结果中的次数?
【发布时间】:2013-07-22 17:12:25
【问题描述】:

以下数据库结果/表是通过使用下面的 SQL 查询将 2 个表连接在一起而创建的。我还想做的是显示第三列,它计算某个值包含在 main_category 列中的次数。在底部的表格中可以看到所需结果的示例,其中第三列显示“主要类别 1”出现的次数 - 在本例中为 8 次,“主要类别 2”出现 6 次。有谁知道我需要对现有查询做什么才能做到这一点?是否涉及GROUP BYCOUNT

+--------------+------------------+ |子类别 | main_category | +--------------+------------------+ |子类别A |主要类别 1 | |子类别B |主要类别 1 | |子类别C |主要类别 1 | |子类别D |主要类别 1 | |子类别E |主要类别 1 | |子类别F |主要类别 1 | |子类别G |主要类别 1 | |子类别H |主要类别 1 | |子类I |主要类别 2 | |子类别J |主要类别 2 | |子类别K |主要类别 2 | |子类别L |主要类别 2 | |子类别M |主要类别 2 | |子类别N |主要类别 2 | +--------------+------------------+
  SELECT headings.heading AS sub_category,    
         primary_category AS main_category  
  FROM   TABLE1 INNER JOIN headings ON TABLE1.Heading=TABLE2.heading   

UNION

  SELECT TABLE2.heading     AS heading,
         secondary_category AS main_category   
  FROM   TABLE1 INNER JOIN TABLE2 ON TABLE1.Heading=TABLE2.heading   

ORDER BY main_category ASC
+--------------+------------------+--------+ |子类别 | main_category |计数 | +--------------+------------------+--------+ |子类别A |主要类别 1 | 8 | |子类别B |主要类别 1 | 8 | |子类别C |主要类别 1 | 8 | |子类别D |主要类别 1 | 8 | |子类别E |主要类别 1 | 8 | |子类别F |主要类别 1 | 8 | |子类别G |主要类别 1 | 8 | |子类别H |主要类别 1 | 8 | |子类I |主要类别 2 | 6 | |子类别J |主要类别 2 | 6 | |子类别K |主要类别 2 | 6 | |子类别L |主要类别 2 | 6 | |子类别M |主要类别 2 | 6 | |子类别N |主要类别 2 | 6 | +--------------+------------------+--------+

【问题讨论】:

    标签: mysql sql join count


    【解决方案1】:

    我在这里为您提供了问题中提供的示例数据,子查询只是为了向您展示如何做到这一点的逻辑

    SELECT *,(SELECT COUNT( mcat) FROM `categoriesstack`
    
     WHERE mcat=cs.mcat) AS `count` FROM `categoriesstack` cs 
    

    Here is your fiddle

    这是您可以在查询中实现的方式,但不确定是否有效

      SELECT headings.heading AS sub_category,    
             primary_category AS main_category,
      (SELECT COUNT(primary_category) FROM `TABLE1` WHERE primary_category=TABLE1 .primary_category) AS `count`   
      FROM   TABLE1 INNER JOIN headings ON TABLE1.Heading=TABLE2.heading   
    
    UNION
    
      SELECT TABLE2.heading     AS heading,
             secondary_category AS main_category,
      (SELECT COUNT(secondary_category) FROM `TABLE1` WHERE secondary_category=TABLE1 .secondary_category) AS `count`   
      FROM   TABLE1 INNER JOIN TABLE2 ON TABLE1.Heading=TABLE2.heading   
    
    ORDER BY main_category ASC
    

    希望一切顺利

    【讨论】:

    • 谢谢。这似乎是我需要的,但我正在努力让您的代码与我的确切 SQL 一起工作。请您看一下this fiddle that I've created,它可以更好地说明我正在尝试做什么,看看您的子查询如何使用它?前两个表是我要加入的两个表。第三个表是我尝试创建的查询的结果。我需要将计数添加到第三个表中。
    • 谢谢@dianuj - 我们越来越近了 :) 最后我删除了 GROUP BY - 这是我的错,因为我不应该将它们分组到我的演示表中。你可以在这个小提琴上看到:sqlfiddle.com/#!2/e54f5/2 我已经把 GROUP BY 拿走了,而且子类别也不是一样的,而是我让它们不同,因为这就是我的应用程序中发生的事情。
    • 我最新的小提琴中的第一个表是“标题”表。我一直在试图弄清楚为什么现在 COUNT 不准确?第一个表显示“主要类别 1”总共出现 13 次,但在 COUNT 列中显示为 12。 “主要类别 2”出现 7 次,但它有 2 个不同的值,3 和 4。“主要类别 3”似乎正确计数为 3。但“主要类别 4”应该是 1,并且没有出现。奇怪,有什么想法@dianuj?
    • 我已经修复了这里的一些问题,我在 AREA_TABLE 中遗漏了一些值。所以基本上现在的问题是primary_category 和secondary_category 的计数没有组合成一个值。是否可以将它们组合起来,使每个“主要类别 1”行读取 13,而不是 12 和 1?在此处查看新小提琴:sqlfiddle.com/#!2/21a207/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    相关资源
    最近更新 更多