【发布时间】:2020-03-29 18:44:45
【问题描述】:
我正在寻找一个棘手的 MySQL 查询来为另一列中的每个值返回最常见的列值。我可以使用 PHP 来处理每个结果,但是用一个查询来做会更酷:)
例如,如果有一个这样的表,称为“事务”:
Id payee exp category
1 Amazon 25.00 Gifts
2 Amazon 30.21 Books
3 Amazon 12.98 Gifts
4 Amazon 15.00 Groceries
5 Amazon 14.54 Gifts
6 Alibaba 55.55 Stock
7 Alibaba 99.00 Stock
8 Alibaba 12.00 Fun
…
我想要的结果是这样的:
payee count(payee) category
Amazon 3 Gifts
Alibaba 2 Stock
…
我可以这样做:
SELECT `payee`, COUNT(`payee`), `category` FROM `transactions` WHERE 1 GROUP BY category ORDER BY COUNT(`payee`) DESC
并接近我想要的:
Amazon 3 Gifts
Alibaba 2 Stock
Amazon 1 Books
Amazon 1 Groceries
Alibaba 1 Fun
但我不想要非最大计数(例如 Amazon、1、Books)。
我必须做一个子查询吗?还是用在?
【问题讨论】:
标签: mysql sql count greatest-n-per-group window-functions