如何修改MySQL查询以计算值在DB表/结果中出现的次数?
以下数据库结果/表是通过使用下面的SQL查询将两个表连接在一起创建的。我还想做的是显示第三列,它计算某个值在主类别列中包含的次数。在底部的表格中可以看到期望结果的示例,其中第三列显示了“主要类别1”出现的次数-在本例中为8次,“主要类别2”出现6次。有人知道我需要对现有查询做什么才能做到这一点吗?它是否涉及如何修改MySQL查询以计算值在DB表/结果中出现的次数?,mysql,sql,join,count,Mysql,Sql,Join,Count,以下数据库结果/表是通过使用下面的SQL查询将两个表连接在一起创建的。我还想做的是显示第三列,它计算某个值在主类别列中包含的次数。在底部的表格中可以看到期望结果的示例,其中第三列显示了“主要类别1”出现的次数-在本例中为8次,“主要类别2”出现6次。有人知道我需要对现有查询做什么才能做到这一点吗?它是否涉及分组依据和计数 +--------------+-----------------+ | sub_category | main_category | +-------------
分组依据
和计数
+--------------+-----------------+
| sub_category | main_category |
+--------------+-----------------+
| SubCategoryA | main category 1 |
| SubCategoryB | main category 1 |
| SubCategoryC | main category 1 |
| SubCategoryD | main category 1 |
| SubCategoryE | main category 1 |
| SubCategoryF | main category 1 |
| SubCategoryG | main category 1 |
| SubCategoryH | main category 1 |
| SubCategoryI | main category 2 |
| SubCategoryJ | main category 2 |
| SubCategoryK | main category 2 |
| SubCategoryL | main category 2 |
| SubCategoryM | main category 2 |
| SubCategoryN | main category 2 |
+--------------+-----------------+
+--------------+-----------------+-------+
|子类|主类|计数|
+--------------+-----------------+-------+
|子类别|主要类别1 | 8 |
|子类别B |主要类别1 | 8 |
|子类别C |主要类别1 | 8 |
|子类别D |主要类别1 | 8 |
|子类别|主要类别1 | 8 |
|子类别F |主要类别1 | 8 |
|子类别|主类别1 | 8 |
|子类别H |主要类别1 | 8 |
|子类别I |主要类别2 | 6 |
|子类别J |主要类别2 | 6 |
|子类别K |主要类别2 | 6 |
|子类别1 |主要类别2 | 6 |
|子类别M |主要类别2 | 6 |
|子类别n |主要类别2 | 6 |
+--------------+-----------------+-------+
我以您的问题中提供的数据为例,在这里使用子查询只是为了向您展示如何执行该操作的逻辑
SELECT *,(SELECT COUNT( mcat) FROM `categoriesstack`
WHERE mcat=cs.mcat) AS `count` FROM `categoriesstack` cs
这是您可以在查询中实现的方法,但不确定这是否有效
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完全兼容。请您看看哪一个更好地说明了我正在尝试做什么,并看看您的子查询如何处理它?前两张桌子就是我要加入的两张桌子。第三个表是我试图创建的查询的结果。我需要将计数添加到第三个表中。谢谢@dianuj-我们越来越近了:)最后我删除了分组-这是我的错,因为我不应该将它们分组到我的演示表中。你可以在这个提琴上看到:我把这个组拿走了,而且我没有把所有的子类别都去掉,而是把它们改成了不同的,因为这就是我的应用程序中发生的事情。我最新的提琴中的第一个表是“标题”表。我一直在想为什么现在的计数不准确?第一张表显示,“主要类别1”总共出现了13次,但在计数列中显示了12次主类别2'出现7次,但有2个不同的值,3和4“主类别3”的计数似乎正确为3。但是“主类别4”应该是1,而这不会出现。奇怪,dianuj有什么想法吗?我已经解决了这里的一些问题,我在AREA_表中丢失了一些值。因此,现在的问题基本上是,主要类别和次要类别的计数没有合并成一个值。是否可以将它们组合在一起,使每个“主类别1”行的读数为13,而不是12&1?请看这里的新小提琴:
SELECT *,(SELECT COUNT( mcat) FROM `categoriesstack`
WHERE mcat=cs.mcat) AS `count` FROM `categoriesstack` cs
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