基于2个表的MySQL计数值(使用group by?)

基于2个表的MySQL计数值(使用group by?),mysql,sql,group-by,Mysql,Sql,Group By,好吧,现在很晚了,所以这可能是显而易见的,但我遇到了一些麻烦 我有两张桌子 Filter - id catId value 所有值都应该是唯一的,因此此查询将获取所有值及其“id” 该查询返回此 id = 82, value = 'filter1' id = 92, value = 'filter2' etc.. etc... 然后,我需要获取“id”列表,并在第二个表中处理它,即 prodFilters - id filterId productId 因此,我需要计算在上一个查询中提

好吧,现在很晚了,所以这可能是显而易见的,但我遇到了一些麻烦

我有两张桌子

Filter
-

id
catId
value
所有值都应该是唯一的,因此此查询将获取所有值及其“id”

该查询返回此

id = 82, value = 'filter1'
id = 92, value = 'filter2'
etc.. etc... 
然后,我需要获取“id”列表,并在第二个表中处理它,即

prodFilters
-
id
filterId
productId
因此,我需要计算在上一个查询中提取的每个“ID”在“prodFilters”中出现的“FilterID”数量

FOREACH(来自上一个查询的id)执行此操作

select count(*) from prodFilters 
where filterId = {value from last query} 
group by filterId
有没有办法通过一个查询来完成这一切,而不是先运行第一个查询,然后再运行多个查询

非常感谢您的帮助

select count(p.id) , p.filderId from prodFilters as p , filter as f
where p.filterId = f.id and f.catId = 7 
group by p.filterId
我认为这是可行的,因为每个catId的值都是唯一的字段


我认为这是可行的,因为每个catId的值都是唯一的字段

您正在寻找类似的内容吗

select Filter.value as prodVal, Filter.id , count(filterId) from prodFilters, Filter where filterId IN (select id from Filter where catId = 7) group by filterId

你在找这样的东西吗

select Filter.value as prodVal, Filter.id , count(filterId) from prodFilters, Filter where filterId IN (select id from Filter where catId = 7) group by filterId

您应该能够在子句中使用

SELECT filterid, COUNT(*)
FROM   prodfilters
WHERE  filterid IN (SELECT id 
                    from Filter 
                    WHERE  catid = 7 
                    group by prodVal)
GROUP  BY filterid 

您应该能够在
子句中使用

SELECT filterid, COUNT(*)
FROM   prodfilters
WHERE  filterid IN (SELECT id 
                    from Filter 
                    WHERE  catid = 7 
                    group by prodVal)
GROUP  BY filterid 
你可以用like

With A as {

select value as prodVal, id 
from Filter 
where catId = 7 group by prodVal

}
select count(*) from prodFilters 
where filterId in {A.id} 
group by filterId
这在oracle中运行良好,但对MySQL不太确定

Mysql:

SELECT   COUNT (*)
    FROM prodfilters t
         JOIN
         (SELECT   VALUE AS prodval, ID
              FROM filter
             WHERE catid = 7
          GROUP BY prodval) ta ON ta.ID = t.filterid
GROUP BY filterid
你可以用like

With A as {

select value as prodVal, id 
from Filter 
where catId = 7 group by prodVal

}
select count(*) from prodFilters 
where filterId in {A.id} 
group by filterId
这在oracle中运行良好,但对MySQL不太确定

Mysql:

SELECT   COUNT (*)
    FROM prodfilters t
         JOIN
         (SELECT   VALUE AS prodval, ID
              FROM filter
             WHERE catid = 7
          GROUP BY prodval) ta ON ta.ID = t.filterid
GROUP BY filterid
试试这个:

Select f.value as prodVal, f.id,  Count(pf.filterId) as 'Filter Count'
From Filter f
inner join prodFilters pf on f.id = pf.filterId
where f.catId = 7 
group by pf.filterId
试试这个:

Select f.value as prodVal, f.id,  Count(pf.filterId) as 'Filter Count'
From Filter f
inner join prodFilters pf on f.id = pf.filterId
where f.catId = 7 
group by pf.filterId

您可以使用此查询

select COUNT(*) from  filter as f left outer join prodFilter as p on f.Id = p.filterId

您可以使用此查询

select COUNT(*) from  filter as f left outer join prodFilter as p on f.Id = p.filterId


不确定我是否理解在没有聚合功能的情况下使用分组依据的原因?恐怕这是不可能的that@Sathya:
按f从组中选择f
从a中选择不同的f
相同。是的,这是可能的。@ypercube虽然我知道这是可能的,但我不知道MySQL允许通过z从组中选择x,y与从a中选择不同的x,y相同?甲骨文会抛出一个错误there@Sathya; 您是对的,MySQL允许通过z从组中选择x,y(默认情况下,没有严格的ANSI设置),这在其他DBMS中是不允许的。如果
z
是唯一的或主键,那么它就相当于
按z,x,y从一个组中选择x,y
否则它返回不确定的结果,更像
按z从一个组中选择一个随机(x),一个随机(y)
我不知道为什么不使用聚合函数就使用
分组?恐怕这是不可能的that@Sathya:
按f从组中选择f
从a中选择不同的f
相同。是的,这是可能的。@ypercube虽然我知道这是可能的,但我不知道MySQL允许通过z从组中选择x,y与从a中选择不同的x,y相同?甲骨文会抛出一个错误there@Sathya; 您是对的,MySQL允许通过z从组中选择x,y(默认情况下,没有严格的ANSI设置),这在其他DBMS中是不允许的。如果
z
是唯一的或主键,那么它相当于
通过z,x,y从组中选择x,y
,否则它返回不确定的结果,更像
通过z从组中选择一个随机(x),一个随机(y)
有两个表,我在这个查询中只看到一个表。不,它不能按我希望的方式工作。@BrianPatterson在两个表上都有一些示例数据会很有帮助。无论如何,现在请尝试。共有2个表,我在此查询中只看到一个表。不,它不能按我希望的方式工作。@BrianPatterson在两个表上都有一些示例数据会很有帮助。不管怎样,请立即尝试。这将在应为4的位置返回170个计数。这将在应为4的位置返回170个计数。由于
GROUP BY prodVal
SELECT id
的原因,它在任何其他DBMS中都不起作用。由于
GROUP BY prodVal
SELECT id
的原因,谢谢您的支持救命啊。最后,根据你的一些建议,我自己找到了答案。再次感谢!谢谢你的帮助。最后,根据你的一些建议,我自己找到了答案。再次感谢!