从数据库中获取最大(顶部的东西数据)在mysql

问题描述:

伙计们我想得到前3名疾病,也从他们的计数从下表特定年份..我应该运行什么查询?从数据库中获取最大(顶部的东西数据)在mysql

mysql> select id,dname,d_id,entrydate from patient_master;  
+----+------------------+------+------------+  
| id | dname   | d_id | entrydate |  
+----+------------------+------+------------+   
| 1 | Root Canal  | 1 | 2012-08-02 |   
| 2 | Cosmetic Filling | 3 | 2012-05-10 | 
| 3 | Root Canal  | 1 | 2012-05-25 | 
| 4 | High BP   | 6 | 2012-07-09 |  
| 5 | Root Canal  | 1 | 2012-07-10 |  
| 6 | Normal Filling | 2 | 2012-05-10 |  
| 7 | Maleria   | 4 | 2012-07-10 |  
| 8 | Maleria   | 4 | 2012-07-12 |  
| 9 | Typhoid   | 5 | 2012-07-12 |  
+----+------------------+------+------------+  
9 rows in set (0.00 sec) 
+2

您可能会发现浏览[** SQLCourse **](http://www.sqlcourse.com/index.html)等在线教程很有帮助,因为这是一个非常简单的标准查询。 – mellamokb 2012-07-23 18:44:29

使用group by条款通过疾病的结果结合起来,并count(*)计数的每种疾病的记录数。然后,您可以从最大到最小的顺序排列,并使用limit 3仅获得排名前三位。我还包含了一个where子句,用于仅筛选2012中的记录。

select count(*), dname 
    from patient_master 
    where entrydate between '2012-01-01' and '2013-01-01' 
group by dname 
order by count(*) desc 
    limit 3 

演示:http://www.sqlfiddle.com/#!2/89c06/6

+1

你可能想'将年份(entrydate)= 2012'更改为'entrydate BETWEEN'2012-01-01'和'2012-12-31''以防万一他有几百万行;) – Vatev 2012-07-23 18:44:21

+0

@Vatev:好点子。由于假设'00:00:00'的日期比较,我将您的建议结束日期更改为'2013-01-01'# – mellamokb 2012-07-23 18:46:55

+0

哥们我能在这里得到每一个月的月数吗?实际上我想要这个融合折线图。 – 2012-07-23 19:09:30

SELECT d_id, dname, count(d_id) as `count`, year(entrydate) as `year` 
FROM patient_master 
GROUP by `year`, d_id 
ORDER BY `year` DESC, `count` DESC 

注意,如果你想每年都拿到,并在相同的查询数我没有把限制在这里,你将需要进入一个写非常复杂的查询,每年获得前3名。

这将按年降序排列,然后按疾病数量每年降序排列。你会注意到能够在这个查询中获得行ID,你也不应该在乎你想要做的事情。