Mysql 诺贝尔奖得主数据库

Mysql 诺贝尔奖得主数据库,mysql,Mysql,从诺贝尔奖获得者第一次获奖的那一年起,我就有了这个数据库。数据来源是: 它只有一个表,因此没有外键,也没有任何ER 该表有以下12列:Id、年份、类别、姓名、出生日期、出生地、县、住所、角色/附属机构、领域/语言、奖项名称、动机 显然,物理、医学等领域有多个获奖者 我一直在尝试使用query查看每十年每个类别的诺贝尔奖获得者数量。我希望我的结果表如下所示: ______________________________________________ 1960-1969 Peace 9 winne

从诺贝尔奖获得者第一次获奖的那一年起,我就有了这个数据库。数据来源是:

它只有一个表,因此没有外键,也没有任何ER

该表有以下12列:Id、年份、类别、姓名、出生日期、出生地、县、住所、角色/附属机构、领域/语言、奖项名称、动机

显然,物理、医学等领域有多个获奖者

我一直在尝试使用query查看每十年每个类别的诺贝尔奖获得者数量。我希望我的结果表如下所示:

______________________________________________
1960-1969 Peace 9 winners
1960-1969 Physics 19 winners
..............................................
1970-1979 Peace 6 winners
1960-1969 Physics 12 winners
..............................................
______________________________________________
这可以通过MySQL中的查询实现吗

非常感谢您的关注。谢谢大家/

这里有一些想法:

假设您希望将十年表示为xxx0-xxx9,并且假设奖励日期为日期数据类型,则可以使用表达式获取一年的前三个字符:

SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3)
类似这样的查询可能会让您开始

SELECT CONCAT(s.ccy,'0-',s.ccy,'9') AS decade
     , s.category 
     , CONCAT(s.count_winners,' winners') AS winners
  FROM ( 
         SELECT SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3) AS ccy
              , t.category
              , COUNT(1) AS count_winners
           FROM mytable t
          WHERE t.award = 'winner'
          GROUP
             BY SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3)
              , t.category
       ) s
别名为
s
的内联视图执行繁重的工作以获得结果,外部查询执行一些格式设置

请注意,此查询不返回任何“零”计数

如果您还需要为所有类别的所有十年都包含“零”计数,那么也可以通过为“所有类别”和“所有十年”引入行源,然后在这些行源之间进行交叉连接,并向别名为
s
的内联视图左连接来实现


上面的查询不返回include“0”count

以下是一种更为SQL的方法:

select concat(floor(npw.year / 10)*10, '-', floor(npw.year / 10)*10+9) as decade,
       npw.category,
       count(*) as winners
from NobelPriceWinners npw              
group by floor(npw.year / 10), npw.category
order by decade, category;
这将生成三列,如下所示:

Decade    Category    Winners
1960-1969 Peace          9
1960-1969 Physics       19
. . .

这无疑是可以做到的。你能编辑你的问题并提供你正在使用的表格的布局吗?诺贝尔奖得主数据库是MySQL数据库吗?现有表格是否包含必要的信息?如果您对这两个问题都回答“是”,那么这是可能的。我获取的数据库来自:。它有以下字段:年份类别名称出生日期出生地点出生国家居住角色/隶属关系字段/语言奖项名称动机您应该首先对数据库进行适当的建模。阅读一点ER建模和如何构建关系数据库。您需要的是一个数据库设计,其中包含类别表、获奖者表以及可能更多的表。您可以使用“外键”连接这些表。然后,您只需向数据库发送巧妙的查询,数据库将为您提供所需数据的表示for@user3344580:请编辑您的问题以包含其他信息(在一个地方阅读比在各种注释中阅读更容易)。理想情况下,你可以将其从评论中删除,以保持问题的整洁。嗨,戈登,谢谢,但不知何故,从查询中得到了以下结果:
十年类优胜者190-199化学56 191-200化学40 192-201化学54 193-202化学56 194-203化学43 195-204化学72 196-205化学79 197-206化学104198-207 chemistry 97 199-208 chemistry 104 200-209 chemistry 123 201-210 chemistry 11在
选择中应该是
*10
。是的,我得到了几十年来想要的组(即1900-1910、1911-1920等)。但是,每一行都有关于“化学”的线索。再次感谢。