使用值的总和作为条件(SQL查询)

时间:2015-01-13 19:42:03

标签: mysql sql

我有一张看起来大致像这样的表

Year    Species   Count
1979    A         0
1980    A         10
1981    A         4
1982    A         3
1979    B         0
1980    B         1
1981    B         2
1982    B         3
1979    C         9
1980    C         14
1981    C         2
1982    C         1

我想要的是返回所有年份,物种,数量,以计算总数(如所有年份的总和)为10或更多的物种。因此总计数为20我希望它只返回

1979    C         9
1980    C         14
1981    C         2
1982    C         1

我玩过但没有真正得到任何有用的东西(总SQL初学者)

3 个答案:

答案 0 :(得分:2)

在MySQL中,您可以使用聚合和join

来完成此操作
select t.*
from table t join
     (select species, count(*) as cnt
      from table
      group by species
     ) s
     on t.species = s.species
where s.cnt >= 10;

答案 1 :(得分:0)

您希望GROUP BY使用SUM()聚合函数和HAVING子句(类似于WHERE,但对于组而不是行),与自连接:

SELECT t1.`Year`, t1.`Species`, t1.`Count`
  FROM mytable t1 INNER JOIN (
    SELECT `Species`, SUM(`Count`)
      FROM mytable
     GROUP BY `Species`
    HAVING SUM(`Count`) >= 20
) t2
    ON t1.`Species` = t2.`Species`

答案 2 :(得分:0)

这是最简单的。你已经掌握了数量。关于物种和过滤表的分组结果的次要问题。您也可以使用exists或join获得相同的功能。

SELECT
    [YEAR]
    ,SPECIES
    ,[COUNT]
FROM TABLE
WHERE SPECIES IN (
    SELECT SPECIES
    FROM TABLE
    GROUP BY SPECIES
    HAVING SUM([COUNT]) > 20)
)

为BootstrapBill添加一些附加说明

为GROUP BY列的每个唯一值分组“制作多个集合”。这允许聚合函数SUM()一次只作用于一组GROUP BY值。 HAVING有点像GROUP BY语句的WHERE子句,允许您应用谓词。 GROUP BY允许返回的唯一字段是分组列本身以及任何聚合函数的结果,您需要联接回或过滤原始集以获取您在查询中定位的其他列。

我开口说,我没看到OP说明这是针对MySql的。核心概念是一样的,所以我要留下答案。 []是用于转义关键字COUNT和YEAR的MS SQL语法。