基于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
的原因,谢谢您的支持救命啊。最后,根据你的一些建议,我自己找到了答案。再次感谢!谢谢你的帮助。最后,根据你的一些建议,我自己找到了答案。再次感谢!