按计数(字段)排序,但答案中包含所有行

时间:2018-03-15 23:39:59

标签: mysql count

我重写了一个stackoverflow问题:

我有一个表和这样的数据:

ID |  Name  |  Type 

1    Apple     A    

2    Boy       A

3    Cat       B

4    Dog       C

5    Elep      C

6    Fish      C

我必须使用什么SELECT才能获得此结果:

4    Dog       C

5    Elep      C

6    Fish      C

1    Apple     A    

2    Boy       A

3    Cat       B

我不想要这个...:

select ID, Name, Type from TABLE where GROUP BY Type order by count(*) desc;

...这个结果:

4    Dog       C

1    Apple     A    

3    Cat       B

由于

1 个答案:

答案 0 :(得分:0)

您遇到的问题是分组命令会影响您尝试选择的值。解决此问题的一种方法是在其自己的表格中为每个typetotal派生计数(type),如:

SELECT
      Type,
     COUNT(*) AS typetotal
    FROM
      TABLE
    GROUP BY
      Type

我们现在可以使用Type命令将typetotal链接到INNER JOIN到您的新SELECT查询,允许您对查询进行排序,如下所示:

SELECT
  TABLE.ID,
 TABLE.Name
 TABLE.Type,
FROM
  (
    SELECT
      Type,
     COUNT(*) AS typetotal
    FROM
      TABLE
    GROUP BY
      Type
  )
  AS tblTypeCount
  INNER JOIN
    TABLE
    ON
      TABLE.Type = tblTypeCount.Type
ORDER BY
  tblTypeCount.typetotal DESC   

我希望我已经以合理的方式解释了这一点,如果您需要任何澄清,或者有任何建议让我知道。