【发布时间】:2017-10-27 06:20:54
【问题描述】:
假设我有下表
+-----------------------+----------------+
| PERSON | ATE |
+-----------------------+----------------+
| Joe | Chicken |
| Joe | Chicken |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Tuna |
| Rob | Chicken |
| Rob | Tuna |
| Rob | Chicken |
| Rob | Chicken |
| Rob | Chicken |
| Rob | Chicken |
| Jonathan | Tuna |
| Jonathan | Tuna |
| Jonathan | Chicken |
| Jonathan | Tuna |
| Jonathan | Chicken |
+-----------------------+----------------+
我想找出每个人最常吃的食物。所以,期望的结果是:
+-----------------------+----------------+
| PERSON | ATE |
+-----------------------+----------------+
| Joe | Tuna |
| Rob | Chicken |
| Jonathan | Tuna |
+-----------------------+----------------+
当然,我会 GROUP BY(人)。之后,我必须找到每组中最常吃的东西。如果它们是数字,那会很容易,因为我可以使用 MAX 函数,但我不知道如何从一堆字符串中挑选出最流行的字符串。
您将如何完成我在 SQL 中尝试做的事情?
【问题讨论】:
-
计数,然后找到最大计数。
-
最大计数将返回一个数字(计数)。然后我是否必须找到计数与 max_count 匹配的食物?这么简单的任务似乎有点复杂
-
@Naldhelaan 很简单,
row_numbermysql 仅支持版本 8 - dev.mysql.com/doc/refman/8.0/en/… -
所以这不是一张真正的桌子
-
其实count会计算被吃掉的物品数量,而不是每个物品被吃掉的次数。我也必须 GROUP BY(ATE) 才能使您的建议起作用,因此我最初感到困惑