Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从mysql中的数据库获取max(top some data)_Mysql_Max - Fatal编程技术网

从mysql中的数据库获取max(top some data)

从mysql中的数据库获取max(top some data),mysql,max,Mysql,Max,伙计们,我想从下表中获得某一特定年份的前三大疾病及其数量。我应该运行什么查询 mysql> select id,dname,d_id,entrydate from patient_master; +----+------------------+------+------------+ | id | dname | d_id | entrydate | +----+------------------+------+------------

伙计们,我想从下表中获得某一特定年份的前三大疾病及其数量。我应该运行什么查询

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)

使用
groupby
子句按疾病组合结果,并使用
count(*)
计算每个疾病的记录数。然后,您可以从最大到最小订购,并使用
limit 3
仅获得前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
演示:

请注意,我没有在这里设置限制,因为如果您想在同一个查询中同时获得年份和计数,则需要编写一个相当复杂的查询,以获得每年前3名


这将按年份递减排序,然后按每年内的疾病计数递减排序。您将注意到,在这个查询中,您将能够获取行id,并且考虑到您正在尝试执行的操作,您也不应该关心该值。

您可能希望
将年份(entrydate)=2012
更改为
entrydate,介于“2012-01-01”和“2012-12-31”之间。
以防他在那里有几百万行;)@瓦特夫:说得好。我将您的建议结束日期更改为
2013-01-01
,因为日期比较假设
00:00:00
dude我可以在这里获得一年中每个月的计数吗?事实上,我希望这用于fusion折线图。您可以根据需要更改
中entrydate介于“2012-01-01”和“2013-01-01”之间的日期。另外,请尝试将GROUP BY更改为
dname,date\U格式('entrydate','%Y%m')
您可能会发现这样的在线教程很有帮助,因为这是一个非常简单的标准查询。
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