如何获得多对多关系中每个独特项目的计数?

时间:2017-02-09 10:42:54

标签: sql postgresql

我有一个包含独特成分的ingredients表:

ID    INGREDIENT
1    Sugar
2    Egg
3    Vanilla

我有一个recipe表,其中包含各种食谱:

ID    RECIPE
1    Eggs Florentine
2    Hash Browns
3    Hamburger

两个表之间存在many to many关系。因此有一个像这样的中间表:

ID    INGREDIENT_ID    RECIPE_ID
1    1    1
2    7    1    
3    1    6
etc.

我需要写一个查询,它会告诉我食谱中每种成分的使用次数。看起来像这样:

Sugar(27), Egg(242), Vanilla(5), ...

我的感觉是我需要使用中间表,但我无法让它工作。

你能帮忙吗?

感谢。

3 个答案:

答案 0 :(得分:1)

所以你可以使用group by功能来实现这一点:http://www.w3schools.com/sql/sql_groupby.asp

在你的情况下,你可以这样做:

Select count(ingredient_id) from recipe_ingredient_table group by ingredient_id

如果您想添加其他值,例如成分名称,您可以包含:

Select count(rit.ingredient_id),i.name 
from recipe_ingredient_table rit 
join ingredient i on (i.id = rit.ingredient_id) 
group by rit.ingredient_id,i.name

答案 1 :(得分:1)


KLASSE      DRENGE  PIGER   ELEVER
0A              12      11      23
1A              7       8       15
1B              4       11      15
2A              10      13      23
3A              10      12      22
4A              7       7       14
4B              10      5       15
5A              19      8       27
6A              10      9       19
6B              9       10      19
7A              7       19      26
7G              3       5       8
7I              7       3       10
8A              10      16      26
9A              12      15      27
0MO             3       2       5
0P1             1       1       2
0P2             0       5       5
10B             4       4       8
10CE            0       1       1
1MO             8       5       13
2CE             8       5       13
3DCE            3       3       6
4MO             4       1       5
6CE             3       4       7
8CE             4       4       8
9CE             4       9       13
REST            5       6       11
Alle klasser    184     202     386

答案 2 :(得分:1)

select count(1), INGREDIENT
from many_to_many 
join ingredients_table it on INGREDIENT_ID =it.ID
group by INGREDIENT