【问题标题】:SQl Query Results by Year按年份的 SQL 查询结果
【发布时间】:2012-05-16 02:14:36
【问题描述】:

我有一个包含以下列的客户表。

 Admit_date    Gender     Homeless   Unemployed    Deleted 
 4/2/2012      Male         Yes         Yes           0
 1/1/2011      Female       Yes         Yes           0
 12/2/2011     Male          No          No           0
 5/23/2009     Female       Yes         Yes           0
 4/3/2009      Male          No          No           0
 7/4/2010      Male         Yes         Yes           0
 9/2/2010      Male         Yes         Yes           0 

我需要显示每年每个组的百分比。我认为这需要一个数据透视表:

                 2009      2010     2011    2012
 Admitted         2          2        2      1
 Male            50%       100%     50%    100%
 Female          50%         0      50%      0%
 Homeless        50%       100%     50%     100%
 Unemployed      50%       100%     50%     100% 

这个查询给了我每年的计数:

 select year(admit_date_c) as Year_of_Admit,count((admit_date_c)) as Admitted
 from clients where deleted = '0' 
 group by year(admit_date_c)

 Year_of_Admit   Admitted
   2009             2
   2010             2
   2011             2
   2012             1

我使用 Case Count 尝试了无数次查询迭代,但不知道如何获得 Gender、Homeless 和 Unemployement 的计数或百分比。一旦我有了它,我想我可以旋转桌子来获得我需要的显示。

【问题讨论】:

  • 什么数据库系统,哪个版本? SQL 只是结构化查询语言 - 许多数据库系统使用的语言 - SQL 不是 数据库产品...很多东西是特定于供应商的 - 所以我们真的需要知道你使用的是什么数据库系统......

标签: sql count pivot case


【解决方案1】:

我认为应该这样做:

select year(admit_date) as year_of_admit,
  sum(case when gender='Male' then 1 else 0 end)*100/count(*) as Male, 
  sum(case when gender='Female' then 1 else 0 end)*100/count(*) as Female, 
  sum(case when homeless='Yes' then 1 else 0 end)*100/count(*) as Homeless
from client
group by year(admit_date)

我不知道您是否可以使用男性/女性或是/否以外的值,例如“未知”。在这种情况下,您必须决定,比如说,10 名男性、5 名女性和 5 个未知数是指 50% 男性,即已知 50% 是男性,还是 66% 男性,即已知性别的 66%是男性。

【讨论】:

  • 就是这样。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多