【问题标题】:Subconsultation in MySQLMySQL 中的子咨询
【发布时间】:2020-06-18 15:34:39
【问题描述】:

如何执行此子查询我开始使用 IN 执行此操作,但我正在调查并将其更改为 INNER JOIN 但它仍然让我错了。

SELECT DISTINCT
    TIMESTAMPDIFF (YEAR, date_nac, CURDATE ()) AS age 
FROM patient 
WHERE date_nac 
INNER JOIN (
    select count(patient id) as Quantity 
    from patient 
    group by age 
    order by Quantity desc limit 6
);

显示这个错误:

错误代码:1235。此版本的 MariaDB 尚不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'

【问题讨论】:

  • 您能用简单的英语准确描述您要执行的查询吗?这将极大地帮助我。
  • 我正在尝试按年龄排序所有患者的数量。
  • 我想知道如何正确放置INNER JOIN。

标签: mysql sql join group-by count


【解决方案1】:

假设你计算年龄的语法是正确的,你可以使用这样的:

Select age, count(age)
From
(SELECT  distinct patient_id, TIMESTAMPDIFF(YEAR, date_nac, CURDATE ()) AS age 
FROM patient
) a
Group by age;

【讨论】:

    【解决方案2】:

    你可以只使用聚合:

    select
        timestampdiff(year, date_nac, current_date) age,
        count(distinct patient_id) no_patients
    from patient
    group by age
    order by no_patients desc
    

    如果patient 表中没有重复的patient_ids(应该如此),您可以使用count(*) 而不是更昂贵的count(distinct patient_id)

    我推测您只想要前 6 个人口最多的年龄:如果是这样,您可以在查询末尾添加 limit 6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多