我想从数据库中获取订购最多的商品。
例如:我有一张下表:
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
但无法达到我想要的结果
答案 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;