Mysql 在sql中,如何根据列上的约束计算列中某个值的百分比?

Mysql 在sql中,如何根据列上的约束计算列中某个值的百分比?,mysql,sql,database,Mysql,Sql,Database,我想知道如何根据约束条件计算某个值的百分比 例如,假设我有一个假设的表,叫做Cats。我在其中插入以下值: Create table Cats (Cat_ID int, Cat_name varchar(max), Cat_Hometown varchar(max), Gender varchar(max), Birth_Year int); INSERT INTO Cats (Cat_ID, Cat_Name, Cat_Hometown, Gender, Birth_year) VALUES

我想知道如何根据约束条件计算某个值的百分比

例如,假设我有一个假设的表,叫做Cats。我在其中插入以下值:

Create table Cats (Cat_ID int, Cat_name varchar(max), Cat_Hometown varchar(max), Gender varchar(max), Birth_Year int);

INSERT INTO Cats (Cat_ID, Cat_Name, Cat_Hometown, Gender, Birth_year)
VALUES (1, 'Blue','Boston','M', 1980),
(2, 'Steamer','Plymouth','F', 1999),
(3, 'Stack','Newton','F', 1980),
(4, 'Overflow','Boston','M', 1978),
(5, 'CatorDog','Allston','F', 1999);
如果我想确定1980年出生在这个主要家乡的雌性猫科动物的百分比呢?我似乎不明白。
“领先的家乡”我指的是最常见的家乡。

假设领先的家乡指的是给定年份表中最多的行数,您可以
按计数排序并获得最常见的行数。然后使用条件聚合来获取百分比
AVG(gender='F')
使用MySQL将条件视为布尔值,返回1表示真,返回0表示假

select AVG(gender='F') 
from cats
where birth_year=1980  and 
cat_hometown in (select cat_hometown 
                 from cats
                 where birth_year=1980 
                 group by cat_hometown
                 order by count(*) desc 
                 limit 1)

你需要找出最常见的家乡。这有点困难,但子查询有帮助。因此:

select avg(c.Gender = 'Female' and c.Birth_Year = 1980 and c.Cat_Hometown = ch.Cat_Hometown)
from cats c cross join
     (select c2.Cat_Hometown
      from cats c2
      group by c2.Cat_Hometown
      order by count(*) desc
      limit 1
     ) ch;

样本数据和预期结果将有所帮助。事实上,分子和分母并不清楚你想要什么(事实上,分子很清楚)。你能解决这个问题的任何部分吗?