使用内部连接从多个表中获取列数据

kgsdhlau  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(283)

我在运行查询时遇到问题。我试着加入3个表格,以显示前10种药物在一年内的处方次数。
当我按原样运行它时,我会收到一条错误消息,说明聚合或选择中存在错误。
我的问题是:

Select Count(MED_ID), MEDICATIONS.MEDICATION_NAME, ENCOUNTER.OBSDATE 
 From MEDICATIONS
 Inner JOIN ENC_MEDICATIONS On ENC_MEDICATIONS.MED_ID = MEDICATIONS.MED_ID
 Inner JOIN ENCOUNTER On ENC_MEDICATIONS.ENC_ID = ENCOUNTER.ENC_ID
 WHERE OBSDATE Between '01/01/2011' And '12/31/2011'
 GROUP BY (MEDICATION_NAME)
 ORDER BY COUNT(MED_ID) DESC

这是我的table模型:

我在连接中哪里出错,以得到我试图显示的结果。
谢谢!-安

zmeyuzjn

zmeyuzjn1#

我相信您正在寻找:

select Count(MED_ID), m.MEDICATION_NAME
from MEDICATIONS m Inner join
     ENC_MEDICATIONS em
     on em.MED_ID = m.MED_ID Inner JOIN
     ENCOUNTER e
     on em.ENC_ID = e.ENC_ID
where e.OBSDATE Between '2011-01-01' and '2011-12-31'
group by m.MEDICATION_NAME
order by COUNT(MED_ID) DESC 
limit 10;

笔记: OBSDATE 没有任何目的 SELECT ,考虑到你想做什么。
日期格式应使用iso/ansi标准。yyyy-mm-dd是此类格式中可读性最高的。
使用表别名!
限定所有列名!

nwo49xxi

nwo49xxi2#

诚然,在不进行测试的情况下,您需要添加第二个非聚合的groupby:

Select MEDICATIONS.MEDICATION_NAME, ENCOUNTER.OBSDATE, Count(enc_medications.MED_ID)
     From MEDICATIONS
     Inner JOIN ENC_MEDICATIONS On ENC_MEDICATIONS.MED_ID = MEDICATIONS.MED_ID
     Inner JOIN ENCOUNTER On ENC_MEDICATIONS.ENC_ID = ENCOUNTER.ENC_ID
     WHERE OBSDATE Between '01/01/2011' And '12/31/2011'
     GROUP BY medications.MEDICATION_NAME, encounter.obsdate
     ORDER BY COUNT(enc_medications.MED_ID) DESC;

相关问题