【问题标题】:SQL count how many occur for specific value from table1 in table2SQL 计算表 2 中表 1 中特定值出现的次数
【发布时间】:2025-11-26 08:35:01
【问题描述】:

我有 2 张桌子,table1 所选食物的名称 table2 为用户选择的早餐、午餐、晚餐、...

表 1:

id name
0 Apple
1 watermelon
2 Pear
3 Peach
4 Walnut
. .
200 Apricot

表 2:

id  username    breakfast  lunch  dinner  Meal1   Meal2  Meal3  
0   Dave        apple      null   Pear    null    null   watermelon
1   John        walnut     Peach  Pear    Apricot null   apple
.   ....        ......     .....  ....    ....... ....   .....
900 Ray         walnut     Peach  Pear    Apricot null   apple

注意:用户在用餐时不能多次选择苹果。

我想知道每位厨师为这位客人准备的食物数量:

apple 400
Pear  399
Peach 398

我试过了:

SELECT breakfast, COUNT( * ) AS value
FROM table2
WHERE breakfast !=  ""
GROUP BY breakfast
ORDER BY `value` DESC
LIMIT 0 , 30

但这不是我想要的,如果用户只想要晚餐,结果中不会出现食物的名称。 谢谢。

【问题讨论】:

  • 应该尝试家庭作业。
  • 查看规范化
  • @Strawberry 谢谢你的时间。

标签: mysql sql-server


【解决方案1】:

感谢Strawberry 它可以通过规范化 table2 来完成

SELECT name, value
FROM (    
SELECT breakfast AS name, COUNT( * ) AS value
FROM table2
WHERE breakfast !=  ""
GROUP BY breakfast
UNION 
SELECT lunch AS name, COUNT( * ) AS value
FROM table2
WHERE lunch !=  ""
GROUP BY lunch 
UNION 
SELECT dinner AS name, COUNT( * ) AS value
FROM table2
WHERE dinner !=  ""
GROUP BY dinner
UNION 
SELECT meal1 AS name, COUNT( * ) AS value
FROM table2
WHERE meal1 !=  ""
GROUP BY meal1
UNION 
SELECT candid5 AS name, COUNT( * ) AS value
FROM table2
WHERE meal2 !=  ""
GROUP BY meal2
UNION 
SELECT meal3 AS name, COUNT( * ) AS value
FROM table2
WHERE meal3 !=  ""
GROUP BY meal3
UNION 
SELECT meal4 AS name, COUNT( * ) AS value
FROM table2
WHERE meal4 !=  ""
GROUP BY meal4
) AS mynewtablename
GROUP BY name
ORDER BY  `mynewtablename`.`value` DESC

希望其他人向Strawberry 学习

它可以帮助某人。

【讨论】: