我有以下问题。
我必须进入列,并且我希望每个唯一条目第一列都是第二列中最常出现的元素。一个例子是:
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/