伙计们,我想从一个特定的year..what查询中获得前3种疾病和它们在下表中的计数,我应该运行吗?
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)发布于 2012-07-24 02:41:43
使用group by子句按疾病合并结果,使用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发布于 2012-07-24 02:47:02
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,也不应该考虑您正在尝试执行的操作的值。
https://stackoverflow.com/questions/11618460
复制相似问题