我遇到了一个任务,我设法完成了目标,但我得到的解决方案不是最优的,我需要更优的解决方案。我用过普通的子查询可能是相关的子查询可以更好地解决这个问题。
这是我做的 table
SELECT custid,
count(DISTINCT bid) AS Total
FROM loan
GROUP BY custid;
它的输出是这样的:-
我想要的是具有最大总计的 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)
这给了我正确的结果是
我想做的是减少代码,因为我在这里又写了同样的东西。我知道必须有一种更简单的方法来做到这一点。也许是相关查询。
寻找一些好的答案。这基本上只是为了澄清我的概念
抱歉,如果这是菜鸟问题。我是 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/