列中最常出现的元素

列中最常出现的元素

我有以下问题。

我必须进入列,并且我希望每个唯一条目第一列都是第二列中最常出现的元素。一个例子是:

COL A    COL B
1        a
2        c
2        c
1        a
1        b
2        d


查询应输出:

Col A    COL B
1        a
2        c

最佳答案

给定此样本数据:

CREATE TABLE t
    (`a` int, `b` varchar(1))
;

INSERT INTO t
    (`a`, `b`)
VALUES
    (1, 'a'),
    (2, 'c'),
    (2, 'c'),
    (1, 'a'),
    (1, 'b'),
    (2, 'd')
;


您首先必须通过如下查询获得每个计数:

SELECT
a, b,
COUNT(*) AS amount
FROM
t
GROUP BY
a, b


然后,您可以将此查询用作子查询,以获取某列包含最大值的行。手册中有一篇很好的文章:The Rows Holding the Group-wise Maximum of a Certain Column

例如,选择上述文章中描述的最后一种方法,您的最终查询将是:

SELECT sq1.a, sq1.b FROM
(
    SELECT
    a, b,
    COUNT(*) AS amount
    FROM
    t
    GROUP BY
    a, b
) sq1
LEFT JOIN
(
    SELECT
    a, b,
    COUNT(*) AS amount
    FROM
    t
    GROUP BY
    a, b
) sq2 ON sq1.a = sq2.a AND sq1.amount < sq2.amount
WHERE sq2.amount IS NULL;


结果如下:

+------+------+
| a    | b    |
+------+------+
|    1 | a    |
|    2 | c    |
+------+------+

关于mysql - 计算MySQL列中最常出现的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33936291/

10-13 22:25