首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按SQL语句分组

按SQL语句分组
EN

Stack Overflow用户
提问于 2010-02-28 00:16:46
回答 3查看 708关注 0票数 4

所以我得到了这样的陈述,很好:

代码语言:javascript
运行
复制
SELECT   MAX(patient_history_date_bio) AS med_date, medication_name
FROM     biological
WHERE    patient_id = 12)
GROUP BY medication_name

但是,我也想要相应的medication_dose。所以我把这个打出来

代码语言:javascript
运行
复制
SELECT   MAX(patient_history_date_bio) AS med_date, medication_name, medication_dose
FROM     biological
WHERE    (patient_id = 12)
GROUP BY medication_name

但是,它给了我一个错误,说:

“biological.medication_dose”在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

因此,我尝试将medication_dose添加到GROUP BY子句中,但是它提供了我不想要的额外行。我想得到我桌子上每一种药物的最新一排。(最新行由max函数确定,获取最新日期)。

我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-28 00:30:33

使用:

代码语言:javascript
运行
复制
SELECT b.medication_name,
       b.patient_history_date_bio AS med_date,
       b.medication_dose
  FROM BIOLOGICAL b
  JOIN (SELECT y.medication_name,
               MAX(y.patient_history_date_bio) AS max_date
          FROM BIOLOGICAL y
      GROUP BY y.medication_name) x ON x.medication_name = b.medication_name
                                   AND x.max_date = b.patient_history_date_bio
 WHERE b.patient_id = ?
票数 5
EN

Stack Overflow用户

发布于 2010-02-28 00:23:54

如果您真的必须这样做,作为一个快速的解决方法,您可以将聚合函数应用到您的medication_dose (如MAX(medication_dose) )。

但是,请注意,这通常表示您正在错误地构建查询,或者需要重构/规范化数据库架构。在您的示例中,看起来您处理的查询不正确。正确的方法应该是OMG Poinies in another answer建议的方法。

您可能有兴趣查阅以下有趣的文章,其中描述了此错误的原因:

  • But Must That Column Be Contained in an Aggregate Function or the GROUP BY clause?
票数 1
EN

Stack Overflow用户

发布于 2010-02-28 00:20:26

您需要将max(medication_dose)放在您的选择中。Group by返回一个结果集,该结果集包含组by子句中字段的不同值,因此显然您有多个记录具有相同的medication_name,但剂量不同,因此您将得到两个结果。

通过输入max(medication_dose),它将返回每个medication_name的最大剂量值。您可以使用任何总量函数的剂量(最大,最小,平均,和等)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2349500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档