mysql查询,根据substring left()和column max()值查找行

falq053o  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(318)

如果具有以下数据集:

Fqdn         RefQty
abcde.com    25
abcdz.uk     10
abcdf.es     15
bcdef.fr     30
bcdeg.de     25
bcdeh.ch     50

在mysql中,如何选择左边(fqdn,4)最大(refqty)的fqdn?我可以找到最大(refqty)的左边(fqdn,4),但是当选择fqdn时我没有得到右边的fqdn?在这种情况下,我的答案是:

Fqdn
abcde.com
bcdeh.ch

这看起来很琐碎,但不知怎的,我被困在这几个小时。我们将不胜感激。

dkqlctbz

dkqlctbz1#

在内部查询中查找修剪字符串的最大计数,并在连接时在外部查询中使用这些计数。

SELECT T.Fqdn
FROM
YOUR_TABLE T
INNER JOIN
(SELECT LEFT(Fqdn, 4) Fqdn_Trim, MAX(RefQty) as MAX_COUNT
FROM YOUR_TABLE
GROUP BY LEFT(Fqdn, 4)) A
ON LEFT(T.Fqdn, 4) = A.Fqdn_Trim AND T.RefQty = A.MAX_COUNT
ORDER BY T.RefQty DESC;
5sxhfpxr

5sxhfpxr2#

一种解决方案是对其自身使用左联接:它查找所有没有另一行具有相同fqdn但refqty更高的fqdn。这必须是refqty最高的行:

SELECT
  t1.Fqdn
FROM
  mytable AS t1 LEFT JOIN mytable AS t2 ON (LEFT(t1.Fqdn, 4) = LEFT(t2.Fqdn, 4) AND 
                                            t1.RefQty < t2.RefQty)
WHERE
  t2.Fqdb IS NULL

相关问题