我有一张看起来大致像这样的表
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初学者)
答案 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语法。