mysql - 选择具有最大值的行的最佳方法是什么?

标签 mysql sql greatest-n-per-group

我遇到了一个任务,我设法完成了目标,但我得到的解决方案不是最优的,我需要更优的解决方案。我用过普通的子查询可能是相关的子查询可以更好地解决这个问题。

这是我做的 table

SELECT custid, 
       count(DISTINCT bid) AS Total 
FROM   loan 
GROUP  BY custid; 

它的输出是这样的:-

enter image description here

我想要的是具有最大总计的 custid

一种方法是使用 Order by Total DESC LIMIT 1 但这只会给出 1 个结果。

我做的是

SELECT custid 
FROM   (SELECT custid, 
               count(DISTINCT bid) AS Total 
        FROM   loan 
        GROUP  BY custid) c1 
WHERE  total = (SELECT max(Total) 
                FROM   (SELECT custid, 
                               count(DISTINCT bid) AS Total 
                        FROM   loan 
                        GROUP  BY custid) c2) 

这给了我正确的结果是

enter image description here

我想做的是减少代码,因为我在这里又写了同样的东西。我知道必须有一种更简单的方法来做到这一点。也许是相关查询。

寻找一些好的答案。这基本上只是为了澄清我的概念

抱歉,如果这是菜鸟问题。我是 SQL 的菜鸟。

最佳答案

在通过@Ravinder 的提示了解 OP 想要什么之后,
我想内置 mysql 函数 GROUP_CONCAT 是你需要的,sql 是:

select custid_count.Total, GROUP_CONCAT(custid_count.custid order by custid_count.custid asc SEPARATOR ',') as custids from
(select custid, count(distinct bid) as Total from loan group by custid order by Total desc) as custid_count
group by custid_count.Total
order by custid_count.Total desc
limit 1;

结果列custids是用','拼接的最大id,查询后需要用','拆分custids,将每个子串转成你需要的数字类型,

关于mysql - 选择具有最大值的行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116682/

相关文章:

php - 如何为不同列中的每个条目分配错误

mysql - 在 MySQL 表中,强制记录中的值成为少数选项之一,受同一记录中不同值的影响

mysql - 如何从mysql数据库中获取倒数第二行?

sql - 替换SQL中的字符串

mysql - SQL 仅选择列上具有最大值的行

mysql - 计算两个日期之间一周中的特定天数

php - 为什么 MySQL 不存储来自 Android 应用程序的数据

sql - 如何按升序选择表格的最后三行?

mysql - 适合 where 子句的组中的最大值

sql - 优化 GROUP BY 查询以检索每个用户的最新行