2010-07-26 3 views
1

다른 테이블을 결합한 후 정확한 열 수를 얻는 데 문제가 있습니다. 열이 조인 될 때 ​​조인중인 테이블의 DISTINCT 수가 여전히 필요합니다.다른 테이블을 결합한 후 테이블 열의 개별 카운트 얻기

식당에는 여러 개의 식사가 있고 식사에는 여러 개의 음식 그룹이 있으며 음식 그룹에는 여러 가지 재료가 들어 있습니다.

나는 레스토랑에서 얼마나 많은 식사, 음식 그룹 및 성분을 계산할 수 있는지 알고 싶습니다.

내가 food_groups에 가입하면 식량이 늘어납니다. (자연스러운 행동이므로 이해가 안됩니다. DISTINCT와 내가 찾은 다른 것들을 시도했습니다.) ,하지만 아무것도 트릭을 할 것으로 보인다. 이 쿼리를 여러 쿼리로 분할하는 대신 하나의 쿼리로 유지하려고합니다.

SELECT 
    COUNT(meals.id) AS countMeals, 
    COUNT(food_groups.id) AS countGroups, 
    COUNT(ingrediants.id) AS countIngrediants 
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id 
INNER JOIN 
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN 
    ingrediants ON food_groups.id = ingrediants.food_group_id  
WHERE 
    restaurants.id='43' 
GROUP BY 
    restaurants.id 

고마워요!

+0

* 메일이없는 레스토랑이있는 경우 'LEFT JOIN'을 사용해야합니다. 그렇지 않으면 알 수 없습니다! – mvds

답변

3

DISTINCT 카운트

SELECT 
    COUNT(DISTINCT meals.id) AS countMeals, 
    COUNT(DISTINCT food_groups.id) AS countGroups, 
    COUNT(DISTINCT ingrediants.id) AS countIngrediants 
FROM 
    restaurants 
INNER JOIN 
    meals ON restaurants.id = meals.restaurant_id 
INNER JOIN 
    food_groups ON meals.id = food_groups.meal_id 
INNER JOIN 
    ingrediants ON food_groups.id = ingrediants.food_group_id  
WHERE 
    restaurants.id='43' 
GROUP BY 
    restaurants.id 
1

하위 쿼리를 수행해야 할 것입니다. 같은 뭔가 :

SELECT 
    (SELECT COUNT(1) FROM meals m WHERE m.restaurant_id = r.id) AS countMeals, 
    (SELECT COUNT(1) FROM food_groups fg WHERE fg.meal_id = m.id) AS countGroups, 
    (SELECT COUNT(1) FROM ingrediants i WHERE i.food_group_id = fg.id) AS countGroups 
FROM restaurants r 
1

당신이 당신의 독특하고있는에 열을 가하고 있었다 내부에 간다? COUNT()를 사용할 때 괄호 안에있는 별색을 사용해야 할 경우 당신이 계산하려고하는 것과는 다른 단일 열을 사용하여이를 수행해야합니다. 예 :

SELECT 
    COUNT(DISTINCT M.id) AS count_meals, 
    COUNT(DISTINCT FG.id) AS count_food_groups, 
    COUNT(DISTINCT I.id) AS count_ingredients 
FROM 
    Restaurants R 
INNER JOIN Meals M ON M.restaurant_id = R.id 
INNER JOIN Food_Groups FG ON FG.meal_id = M.id 
INNER JOIN Ingredients I ON I.food_group_id = FG.id 
WHERE 
    R.id='43' 

단일 레스토랑을 선택 했으므로 GROUP BY가 필요하지 않습니다. 또한 영어 이외의 언어로 작성하지 않으면 재료의 철자가 틀렸다고 생각합니다.

관련 문제