0
我有一個查詢來計算一所大學(按流派劃分)有多少學生吃食物類別(例如蔬菜,肉類,魚類......)。優化查詢SQL
我的數據庫中的每種菜餚都有一個id dish_composition。我寫查詢,但計算所有類別使用711秒(12分鐘)。這是非常低效的。你能幫我減少執行時間嗎?
這是查詢:
<?php
$query=(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition BETWEEN 51 AND 54 GROUP BY dish.dish_composition) carne)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition BETWEEN 10 AND 34 GROUP BY dish.dish_composition) primo)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition BETWEEN 60 AND 62 GROUP BY dish.dish_composition) pesce)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition IN (71,72,81,82,93) GROUP BY dish.dish_composition) verdura)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition BETWEEN 91 AND 92 GROUP BY dish.dish_composition) uova)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition IN (101,101,212) GROUP BY dish.dish_composition) formaggi)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition=83 GROUP BY dish.dish_composition) legumi)
UNION ALL
(SELECT SUM(uomini) as uomini_carne, SUM(donne) as donne_carne FROM (SELECT SUM(case when person.sex='M' then 1 end) as uomini, SUM(case when person.sex='F' then 1 end) as donne FROM `dish` JOIN dish_bought ON dish.id_dish=dish_bought.id_dish JOIN meal_receipt ON dish_bought.id_receipt=meal_receipt.id_receipt JOIN relation ON meal_receipt.id_stu=relation.id_stu JOIN person ON relation.id_pers=person.id_pers WHERE dish.dish_composition=415 GROUP BY dish.dish_composition) frutta)";
?>
用例語句 – maSTAShuFu
我可以在哪裏使用case語句? – kyle1009
使用案例語句分類您的碟形...使用此查詢作爲派生表來總結您的卡路里組的碟... – maSTAShuFu