计算MySQL中列中最常用的元素

时间:2015-11-26 10:32:29

标签: mysql

我有以下问题。

我需要列,我希望每个唯一条目第一列是第二列中最常用的元素。一个例子是:

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

查询应输出:

Col A    COL B
1        a
2        c

3 个答案:

答案 0 :(得分:1)

鉴于此样本数据:

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    |
+------+------+

答案 1 :(得分:0)

SELECT子句中使用子选择是解决问题的简单方法:

SELECT ColA, (SELECT ColB
    FROM yourtable i
    WHERE i.ColA = o.ColA
    GROUP BY ColB
    ORDER BY COUNT(*) DESC
    LIMIT 1) AS ColB
FROM yourtable o
GROUP BY ColA;

o只是外部查询的别名,内部查询的i。他们需要WHERE条款才能​​工作。

上述查询是以下查询的结果,用于查找具有给定ColB的{​​{1}}最常见的出现:

ColA

答案 2 :(得分:-2)

你必须为此创建我的Sql函数,假设你的函数名是getMaxOccr所以它看起来像

CREATE FUNCTION `getMaxOccr`(val INT) 
RETURNS varchar(25) CHARSET latin1
BEGIN

DECLARE answer VARCHAR(25) DEFAULT '';

SELECT colb FROM `tablename` 
WHERE cola = val 
ORDER BY COUNT(colb) 
DESC    INTO answer;
RETURN answer;

END

创建此功能后,您只需调用

即可
SELECT cola,getMaxOccr(cola) from tablename GROUP BY cola

这将为您提供所需内容的列表希望这有助于