【问题标题】:SQL - Conditional countSQL - 条件计数
【发布时间】:2021-09-06 21:19:38
【问题描述】:

我被 sql 语句困住了。我正在尝试列出拥有最多奶牛(女性)的人的姓名,指定 id_person、姓名、物种、性别和拥有的奶牛数量。 在动物表中,我有:id_animal、name_animal、species、sex、date_of_birth 和在 person 表中:id_animal、id_person、name、adress。

+--------------+----------+
| id_person    | id_animal|
+--------------+----------+
| 1            | 1        | 
| 2            | 2        |
| 1            | 1        |
| 3            | 4        |
| 4            | 5        |
+--------------+----------+

这些是我感兴趣的栏目。我举了一个例子.. id: 1 的所有者拥有 2 头奶牛,id_animal 列中的 id: 1 分配给了奶牛。

那么如何编写查询来列出拥有最多奶牛的人的姓名?

输出应该是:

+--------------+------+----+--------------------+
| id_person    | name | sex|total_number_of_cows|
+--------------+------+----+--------------------+
| 1            | Tom  |  F | 2                  |
+--------------+------+----+--------------------+

我正在为 SQLite 使用数据库浏览器

提前谢谢你!

【问题讨论】:

  • (1) 显示您想要的结果。 (2) 标记您正在使用的数据库。 (3) 解释你怎么知道1 是一头牛。
  • 我不知道..我只是举了一个例子..我需要检查动物名称是否是'cow'并且性动物是'f'然后返回人......

标签: sql database count


【解决方案1】:

您没有提及您正在使用的 RDBMS,因此我将发布适用于 SQL Server 和 MySql 的答案,因为这些对于 SO 上的问题很常见。如果是另一个,请告诉我。

根据示例数据,您可以使用如下内容:

-- MySql
SELECT id_person
  FROM animals
  GROUP BY id_person
  ORDER BY COUNT(id_animal) DESC
  LIMIT 1;

-- SQL Server
SELECT TOP 1 id_person
  FROM animals
  GROUP BY id_person
  ORDER BY COUNT(id_animal) DESC;

这会按人对每个结果进行分组,并计算他们拥有的动物数量。只返回拥有最多动物的人。

输出:

id_person
1

这有一个限制 - 如果两个或更多人拥有相同数量的动物,那么这将任意返回其中一个(你不知道它会是哪一个)。也许如果您可以更详细地确定您的用例,那么我可以修改答案以反映在这些情况下该怎么做。

这里有一些工作小提琴:

【讨论】:

  • 它有效,但是返回了拥有最多动物的人,我想返回拥有最多牛(女性)的人 .. 在我的桌子上,我有更多的动物,如牛、狗、猫等等..
  • @AlyAly12 要满足这一点,只需在查询中添加WHERE 语句即可。例如,如果奶牛是 1,则添加 WHERE id_animal = 1 以仅获取奶牛的结果。这有帮助吗?
  • 我想我需要检查 name_animal = 'cow' 和 sex_animal = 'f' 然后返回拥有最多奶牛的人..但是无论如何我尝试更改查询都会出错..
猜你喜欢
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2011-12-19
  • 2014-08-01
相关资源
最近更新 更多