0

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

+--------------+------------------+  
| 子类别 | 主要类别 |  
+--------------+------------------+  
| 子类别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
+--------------+------------------+--------+  
| 子类别 | 主要类别 | 计数 |  
+--------------+------------------+--------+  
| 子类别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 |  
+--------------+------------------+--------+  
4

1 回答 1

0

i have take you example data provided in your question here the subquery just to show you the logic how you can do it

SELECT *,(SELECT COUNT( mcat) FROM `categoriesstack`

 WHERE mcat=cs.mcat) AS `count` FROM `categoriesstack` cs 

Here is your fiddle

This is how you can implement in your query but not sure that is works

  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

Hope it works fine

于 2013-07-22T17:46:22.740 回答