带有计数的子查询

时间:2015-07-02 09:39:29

标签: mysql

此查询工作正常,我得到(男,女)项目列表。

SELECT dmg.dmg_Sex
FROM Demographic dmg
JOIN LINK lnk ON lnk.lnk_dmgID = dmg.dmg_ID
JOIN Admission adm ON adm.adm_ID = lnk.lnk_admID
WHERE adm.adm_ID in (SELECT DISTINCT(adm.adm_ID)
                     FROM Admission adm
                     JOIN LINK lnk ON lnk.lnk_admID = adm.adm_ID
                     JOIN DAILY_LINK dlnk ON dlnk.dlk_lnkID = lnk.lnk_ID
                     WHERE  dlnk.dlk_AssessDate >= '2011/01/01' AND dlnk.dlk_AssessDate <= '2011/03/31')

如果我这样做,我会将男性,女性结果列入计算清单

SELECT dmg.dmg_Sex, COUNT (dmg.dmg_Sex)
FROM Demographic dmg
JOIN LINK lnk ON lnk.lnk_dmgID = dmg.dmg_ID
JOIN Admission adm ON adm.adm_ID = lnk.lnk_admID
WHERE adm.adm_ReferralDate >= '2011/01/01'
AND adm.adm_ReferralDate <= '2011/03/31'
GROUP BY dmg.dmg_Sex DESC

但是尝试通过向第一个查询添加COUNT (dmg.dmg_Sex)来组合这两个查询是行不通的。为什么这样或者我错过了什么

SELECT dmg.dmg_Sex, COUNT (dmg.dmg_Sex)
FROM Demographic dmg
JOIN LINK lnk ON lnk.lnk_dmgID = dmg.dmg_ID
JOIN Admission adm ON adm.adm_ID = lnk.lnk_admID
WHERE adm.adm_ID in (SELECT DISTINCT(adm.adm_ID)
                     FROM Admission adm
                     JOIN LINK lnk ON lnk.lnk_admID = adm.adm_ID
                     JOIN DAILY_LINK dlnk ON dlnk.dlk_lnkID = lnk.lnk_ID
                     WHERE  dlnk.dlk_AssessDate >= '2011/01/01' AND dlnk.dlk_AssessDate <= '2011/03/31')

所需的输出

  

男243
  女183

现在输出

  


  男
  男
  男
  男
  男
  女
  女
  女
  女
  女
  女
  女

2 个答案:

答案 0 :(得分:1)

你应该按dmg.dmg_Sex分组。因为如果在SELECT子句中使用聚合函数,则必须使SELECT子句中的所有非聚合字段都在GROUP BY子句中。

答案 1 :(得分:1)

为了能够计算性别,您需要对组合SQL

执行以下SQL
GROUP BY dmg.dmg_Sex DESC