【问题标题】:Grouping from highest to lowest从高到低分组
【发布时间】:2014-04-28 17:55:36
【问题描述】:

我有一张这样的桌子:

+---------+--------------+---------+
| visitty | specialty    | doctors |
+---------+--------------+---------+
| 1       | oncology     | 3611    |
| 1       | neurology    | 1931    |
| 1       | rheumatology | 1471    |
| 0       | oncology     | 35      |
| 0       | rheumatology | 28      |
| 0       | neurology    | 20      |
+---------+--------------+---------+

上表是通过排序字段doctors创建的

现在,我正在尝试得到以下结果:

+---------+--------------+---------+
| visitty | specialty    | doctors |
+---------+--------------+---------+
| 1       | oncology     | 3611    |
| 0       | oncology     | 35      |
| 1       | neurology    | 1931    |
| 0       | neurology    | 20      |
| 1       | rheumatology | 1471    |
| 0       | rheumatology | 28      |
+---------+--------------+---------+

有什么办法吗?

回复 Adil Miedl ......这些是查询中使用的标准: (PS:我认为如果没有引用的表格,理解起来可能会有点混乱)

SELECT 
    su.visitty, cs.specialty, COUNT(*) doctors
FROM
    contacts c
INNER JOIN contact_groups ccgc ON c.id_contact = ccgc.id_contact
    AND ccgc.status = 1
INNER JOIN groups ccg ON ccg.id_ccenter_groups = ccgc.id_ccenter_groups
    AND ccg.status = 2
INNER JOIN distribuition ccd ON ccd.id_ccenter_groups = ccg.id_ccenter_groups
    AND ccd.status = 2
INNER JOIN cds_contacts sc ON c.id_cds_account = sc.id_cds_account
LEFT JOIN cds_contacts_territories AS sct ON sc.id_contact = sct.id_contact
INNER JOIN cds_usuarios_territories AS sut ON sut.id_territory = sct.id_territory
INNER JOIN cds_usuarios AS su ON su.id_user = sut.id_user
INNER JOIN contact_specialties cs ON c.id_contact = cs.id_contact
    and cs.status = 1
    and cs.srsmain = 'Y'
WHERE
    c.contact_type = 'Doctor'
        AND ccd.release_date BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59'
GROUP by visitty , cs.specialty
ORDER BY doctors DESC;

【问题讨论】:

  • 请为要排序的表格添加其他条件。
  • Adil Soomro ,抱歉回复晚了。已按照您的要求插入标准。

标签: mysql sql group-by sql-order-by


【解决方案1】:

您似乎想按其中的医生总数来订购专科。查询需要在进行排序之前计算这个值:

select t.visitty, t.specialty, t.doctors
from table t join
     (select specialty, sum(doctors) as numdoctors
      from table t
      group by specialty
     ) tsum
     on t.specialty = tsum.specialty
order by tsum.doctors desc, tsum.specialty, t.doctors desc;

【讨论】:

  • 谢谢,这解决了问题。我只是将这个“按 tsum.doctors、tsum.specialty、t.doctors desc 订购”更改为:“按 tsum.doctors desc、tsum.specialty、t.doctors desc 订购”再次感谢。 =]
猜你喜欢
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
相关资源
最近更新 更多