如何使用mysql从列中获取最频繁的值

时间:2018-08-04 12:29:47

标签: mysql sql

我想从数据库中获取订购最多的商品。

例如:我有一张下表:

S.no-----Name--------Items

1---------rob------------Pen, pencil, rubber

2---------jim------------rubber, scissor

3--------rick------------pen,pencil

我想按如下所示获取大多数订购商品

S.no---item-------Count

1------Pen---------2

2------Pencil------2

3------Rubber------1

4------Scissor-----1

下面是我正在使用的查询

SELECT name, items, count(items) AS cnt FROM tbl_orderitem GROUP BY items ORDER BY cnt DESC

但无法达到我想要的结果

1 个答案:

答案 0 :(得分:2)

这是一种方法。您需要将这些项目拆分为行。
然后,您可以根据分组并计数。

下面的示例SQL仅对4个数字使用子查询。
但这可以由仅包含数字的理货单代替。

可以找到Sql Fiddle测试here

SELECT
  TRIM(
    LOWER(
      SUBSTRING_INDEX(
       SUBSTRING_INDEX(Items, ',', numbers.n), ',', -1))) AS Item,
  COUNT(*) AS Total
FROM testtable
JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers 
  ON CHAR_LENGTH(Items)-CHAR_LENGTH(REPLACE(Items,',','')) >= numbers.n-1
GROUP BY Item
ORDER BY Total DESC;