【问题标题】:Simple SQL query - group by and count/sum?简单的 SQL 查询 - 分组和计数/总和?
【发布时间】:2026-02-17 14:10:01
【问题描述】:

我的 SQL 很烂,已经尝试了几个小时,有人可以告诉我如何写这个吗?

我有一个名为 Animals 的表,其中包含 SpeciesAge 列。 例如:

+-----------------------+
|  Species   |   Age    |
+-----------------------+
|   Dog      |    3     |  
|------------|----------|
|   Dog      |    18    |
|------------|----------|
|   Cat      |    3     |
|------------|----------|
|   Dog      |    20    |
+-----------------------+

我想弄清楚,对于每个物种,3 岁的所有动物中有多少百分比是该物种,以及所有 3 岁以外的动物中有多少百分比是该物种。

所以有些事情会告诉我:

狗 4.5%(意味着所有 3 岁的动物中有 4.5% 是狗) 23%(意味着所有 3 岁以外的动物中有 23% 是狗)

猫 7.8% 12%

等等等等

非常感谢

【问题讨论】:

  • 请添加您尝试过的查询。听起来像家庭作业。
  • 您应该告诉我们您使用的是哪个版本的 SQL。

标签: sql


【解决方案1】:

试试这个查询:

SELECT
    Species,
    100.0 * COUNT(CASE WHEN Age = 3 THEN 1 END) / 
        (SELECT COUNT(*) FROM yourTable WHERE Age = 3) AS 3_pct,
    100.0 * COUNT(CASE WHEN Age <> 3 THEN 1 END) / 
        (SELECT COUNT(*) FROM yourTable WHERE Age <> 3) AS not_3_pct,
FROM yourTable
GROUP BY Species;

分子计算特定物种中 3 岁的动物数量:

COUNT(CASE WHEN Age = 3 THEN 1 END)

分母计算所有个3岁的动物的数量:

(SELECT COUNT(*) FROM yourTable WHERE Age = 3)

【讨论】:

    【解决方案2】:

    获取所有 3 岁和狗的动物的百分比:

    declare @p int;
    select @p = (100.0 * COUNT(a.Species) / (select COUNT(*) from Animals)) from Animals a
    where a.Age = 3 and a.Species = 'dog'
    group by a.Species
    print CONVERT(NVARCHAR, @p) + '% of animals age 3 are dogs';
    

    【讨论】:

      【解决方案3】:

      SELECT name,age, count(age) as event_count, count(age) * 100.0 / (select count(*) from animal) as event_percent FROM animal group by age

      【讨论】: