我有一张桌子
tid item
1 k1
1 k1
1 k1
1 k2
1 k2
2 k1
2 k3
3 k2
3 k1
3 k4
我想从总项目中订购,所以k1出现5次,比k2出现3次,k3和k4出现一次。我想通过tid asc和item desc的计数来订购。
我试过这个查询,
SELECT *
FROM `tes2`
order by count(id_item) desc
但它只返回1行。
tid item
1 k1
如何获取所有数据?
我想要的输出就像这样
tid item
1 k1
1 k1
1 k1
1 k2
1 k2
2 k1
2 k3
3 k1
3 k2
3 k4
所以按项目计数排序。
答案 0 :(得分:1)
您可以使用子查询来获取每个项目的计数,然后将其连接到项目上的主表,以便按顺序排序。 以下是MSSQL,但您应该能够在MySQL查询中使用此解决方案。
设置测试 -
DECLARE @Test TABLE
(
tid int,
tem VARCHAR(5)
)
INSERT into @Test (tid, item) VALUES (1, 'k1');
INSERT into @Test (tid, item) VALUES (1, 'k1');
INSERT into @Test (tid, item) VALUES (1, 'k1');
INSERT into @Test (tid, item) VALUES (1, 'k2');
INSERT into @Test (tid, item) VALUES (1, 'k2');
INSERT into @Test (tid, item) VALUES (2, 'k1')
INSERT into @Test (tid, item) VALUES (2, 'k3');
INSERT into @Test (tid, item) VALUES (3, 'k2');
INSERT into @Test (tid, item) VALUES (3, 'k1');
INSERT into @Test (tid, item) VALUES (3, 'k4');
查询 -
SELECT t.tid,t.item
FROM @Test t
JOIN (SELECT t2.Item, COUNT(*) AS ItemCount FROM @Test t2 GROUP BY t2.Item) counts ON counts.Item = t.Item
ORDER BY counts.ItemCount DESC, t.tid ASC
输出 -
tid item
1 k1
1 k1
1 k1
2 k1
3 k1
1 k2
1 k2
3 k2
2 k3
3 k4
答案 1 :(得分:0)
试试这个:
{{1}}