分组后特定列出现的次数的MySQL计数
这是我的疑问:分组后特定列出现的次数的MySQL计数,mysql,sql,Mysql,Sql,这是我的疑问: SELECT mh.super_category AS parentDescription, mh.super_category AS parentSlug, mh.description AS subDescription, mh.slug AS subSlug, COUNT(mh.slug) AS qty, cg.Description AS nestedSubDescription, cg.slug AS
SELECT
mh.super_category AS parentDescription,
mh.super_category AS parentSlug,
mh.description AS subDescription,
mh.slug AS subSlug,
COUNT(mh.slug) AS qty,
cg.Description AS nestedSubDescription,
cg.slug AS nestedSubSlug
FROM Categories AS c
INNER JOIN Category_Groups AS cg ON (c.Category_Group=cg.CategoryCode)
INNER JOIN menu_heading AS mh ON (cg.MenuHeading = mh.id)
INNER JOIN tbl_store_brands ON (tbl_store_brands.categoryID = c.pkID)
WHERE c.seq <> 127
GROUP BY cg.slug
ORDER BY mh.super_category, mh.seq ASC, cg.seq, c.seq, c.Category_Group, c.Category_ID
qty列中返回的数字是mh.slug在没有组条件的情况下出现的次数,但我实际想要的是它在查询中出现的次数,即洗衣机干燥器的4次
我怎样才能做到这一点
新样本结果
+--------------------------+--------------------------+---+------------------------------------+-------------------------------------------+
| Refrigerators | refrigerators | French Door | french-door | 9 | Cabinet Depth: French Door | cabinet-depth-french-door-refrigerators |
| Refrigerators | refrigerators | Side by Side | side-by-side | 9 | Side x Side: with Dispenser | side-by-side-with-dispenser-refrigerators |
| Refrigerators | refrigerators | Bottom Freezer | bottom-freezer | 9 | Bottom Freezer | bottom-freezer-refrigerators |
| Refrigerators | refrigerators | Top Mount | top-mount | 9 | Top Freezer | top-freezer-refrigerators |
| Refrigerators | refrigerators | Built In | built-in | 9 | Built-in Columns Refrigerator Only | built-in-columns-refrigerator-only |
| Refrigerators | refrigerators | Specialty | specialty | 9 | Wine Storage | wine-storage |
| Refrigerators | refrigerators | Freezers | freezers | 9 | Icemaker Kits | icemaker-kits-refrigerator |
| Refrigerators | refrigerators | Refrigerator Accessories | refrigerator-accessories | 9 | Refrigerator Accessories | refrigeration-accessories |
+---------------+---------------+--------------------------+--------------------------+---+------------------------------------+-------------------------------------------+
对于你的第二个问题,试试这个,让我知道它是否有效。我没有时间100%地考虑它,我不知道关系类型,所以这里只是尝试和错误:
SELECT
mh.super_category AS parentDescription,
mh.super_category AS parentSlug,
mh.description AS subDescription,
mh.slug AS subSlug,
cg.Description AS nestedSubDescription,
cg.slug AS nestedSubSlug
(SELECT COUNT(countCg.*) FROM Categories AS c2
INNER JOIN Category_Groups AS countCg
INNER JOIN tbl_store_brands tsb2 ON (tsb2 .categoryID = c2.pkID)
WHERE countCg.MenuHeading = mh.id) As qty
FROM Categories AS c
INNER JOIN Category_Groups AS cg ON (c.Category_Group=cg.CategoryCode)
INNER JOIN menu_heading AS mh ON (cg.MenuHeading = mh.id)
INNER JOIN tbl_store_brands ON (tbl_store_brands.categoryID = c.pkID)
WHERE c.seq <> 127
GROUP BY cg.slug
ORDER BY mh.super_category, mh.seq ASC, cg.seq, c.seq, c.Category_Group, c.Category_ID
您通常按所选列分组,但设置函数的参数除外。首先,您应该重写SQL,因为您误用了MySQL GROUP BY功能。。我已经编辑了我的查询,以便GROUPBY子句是查询中的一列。希望我能正确理解您的意思。尝试将COUNTmh.slug替换为qty,方法是从类别组中选择COUNT*作为countCg,其中countCg.MenuHeading=mh.id作为qty这是假设每个mh.id都有一个唯一的mh.slug。@Roemer很好,谢谢,因为这是一条注释,我不能将其作为答案,如果您想将其添加为答案,我将接受它。谢谢,如果可以的话,我还有一个后续问题,您的代码完全按照它应该的方式工作,但我注意到一个问题,即加入tbl_store_brands不包括类别组,因为商店没有该品牌,所以在冰箱上,例如,您的代码返回9,这是正确的,因为表中有9个,但商店实际上只储存了8个。从tel_store_品牌到Category_组的唯一链接是通过Categories表,当我在代码中包含该连接时,计数为1。有没有办法克服这个问题?我的问题中包含了一组示例结果。将其设置为左连接而不是内部连接,这样就可以了。内部联接只获取两个表中都有记录的记录,左联接获取左表中的所有记录,而不管右表中是否有记录。我只希望所有表中都有匹配的记录,问题是计数数量返回到多个记录,而不限于主查询返回的记录。这有道理吗?啊,对不起,我误解了。这越来越复杂。请尝试添加的额外解决方案,并让我知道它是否有效。如果没有表的概述,就无法确定这是否可行,因为我不知道表之间的关系。
SELECT
mh.super_category AS parentDescription,
mh.super_category AS parentSlug,
mh.description AS subDescription,
mh.slug AS subSlug,
(SELECT COUNT(*) FROM Category_Groups AS countCg WHERE countCg.MenuHeading = mh.id) As qty,
cg.Description AS nestedSubDescription,
cg.slug AS nestedSubSlug
FROM Categories AS c
INNER JOIN Category_Groups AS cg ON (c.Category_Group=cg.CategoryCode)
INNER JOIN menu_heading AS mh ON (cg.MenuHeading = mh.id)
INNER JOIN tbl_store_brands ON (tbl_store_brands.categoryID = c.pkID)
WHERE c.seq <> 127
GROUP BY cg.slug
ORDER BY mh.super_category, mh.seq ASC, cg.seq, c.seq, c.Category_Group, c.Category_ID
SELECT
mh.super_category AS parentDescription,
mh.super_category AS parentSlug,
mh.description AS subDescription,
mh.slug AS subSlug,
cg.Description AS nestedSubDescription,
cg.slug AS nestedSubSlug
(SELECT COUNT(countCg.*) FROM Categories AS c2
INNER JOIN Category_Groups AS countCg
INNER JOIN tbl_store_brands tsb2 ON (tsb2 .categoryID = c2.pkID)
WHERE countCg.MenuHeading = mh.id) As qty
FROM Categories AS c
INNER JOIN Category_Groups AS cg ON (c.Category_Group=cg.CategoryCode)
INNER JOIN menu_heading AS mh ON (cg.MenuHeading = mh.id)
INNER JOIN tbl_store_brands ON (tbl_store_brands.categoryID = c.pkID)
WHERE c.seq <> 127
GROUP BY cg.slug
ORDER BY mh.super_category, mh.seq ASC, cg.seq, c.seq, c.Category_Group, c.Category_ID