SQL在A

时间:2016-02-03 10:14:55

标签: mysql sql

我有一个问题,我现在花了3个多小时。它是这样的。 下面是Columns animal_id和birds_id的表格:

animal_id | bird_id
      1    |    1
      3    |    3
      5    |    2
      2    |    1
      6    |    1

我需要编写一个SQL查询来计算Bird,以及Bird出现的动物数量。 输出应该是:

Number of Animals | Number of Birds
         3        |      1
         1        |      2         

说明:上面的输出显示了这一点 第1行:Bird中的一个元素(Bird_id:1)在动物中出现3次。 第2行:鸟类中的两个元素(Bird_id:2和Bird_id:3)每个都出现在动物中。

到目前为止我的工作:尽我所能,我只能这么做:(

SELECT COUNT(*), COUNT(DISTINCT bird_id) AS D FROM myTable GROUP BY bird_id;

到目前为止的输出:

 3   |   1
 1   |   1
 1   |   1

我在SQL查询方面不是很好。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT `Number of Animals`, 
       COUNT(*) AS `Number of Birds`
FROM (
  SELECT bird_id, COUNT(*) AS `Number of Animals`
  FROM mytable
  GROUP BY bird_id ) AS t
GROUP BY `Number of Animals`

您需要一个更高级别的聚合才能获得所需的结果。

Demo here

答案 1 :(得分:1)

你不必在bird_id上申请点数,试试这个:

select mt.number_of_Animal,count(*) from (select count(*) Number_of_animal, bird_id Bird_id from mytable group by bird_id) mt group by mt.number_of_Animal ;