簡體   English   中英

基於2個表的MySQL計數值(使用group by?)

[英]MySQL Count Values (using group by?) based on 2 tables

好的,太晚了,所以這也許很明顯,但是我遇到了一些麻煩。

我有2張桌子。

Filter
-

id
catId
value

所有值都應該是唯一的,因此此查詢將獲取所有值及其“ id”

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

該查詢返回此...

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

有什么方法可以通過一個查詢來完成所有工作,而不是先運行第一個查詢,然后再運行多個查詢?

任何幫助深表感謝。

您應該可以使用IN子句

SELECT filterid, COUNT(*)
FROM   prodfilters
WHERE  filterid IN (SELECT id 
                    from Filter 
                    WHERE  catid = 7 
                    group by prodVal)
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 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 count(filterid) 
from prodfilters where id in (select value as prodVal, id 
    from Filter 
    where catId = 7 group by prodVal) as temp 
    group by id
SELECT catId, COUNT(*)
FROM   prodFilters
WHERE  catId IN (SELECT id from Filter
                    WHERE  catId = 1 )
GROUP  BY catId
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,值都是唯一字段

您可以使用像

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 COUNT(*) from  filter as f left outer join prodFilter as p on f.Id = p.filterId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM