通过一列的计数在mysql上排序

时间:2016-05-06 13:23:02

标签: mysql sql

我有一张桌子

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

所以按项目计数排序。

2 个答案:

答案 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}}