Mysql 编写查询以获取价格高于同一类型所有药物平均价格的所有药物的详细信息
正如问题所说,我的代码有错误:Mysql 编写查询以获取价格高于同一类型所有药物平均价格的所有药物的详细信息,mysql,sql,Mysql,Sql,正如问题所说,我的代码有错误: select *, avg(price) as average from drug having avg(drug.price) > (select count(price) from drug) 请帮助我。我不确定这是否是最有效的解决方案,但我会这样做: WITH avg_by_type AS ( SELECT type, avg(prive) as avg_type FROM drug GROUP BY type ) SELECT * FROM
select *, avg(price) as average
from drug
having avg(drug.price) > (select count(price) from drug)
请帮助我。我不确定这是否是最有效的解决方案,但我会这样做:
WITH avg_by_type AS (
SELECT type, avg(prive) as avg_type
FROM drug
GROUP BY type
)
SELECT *
FROM drug
INNER JOIN avg_by_type ON avg_by_type.type = drug.type AND avg_by_type.price < drug.price
因为我不知道您使用的是哪种数据库,所以我在这里用泛型-
select a.*
from drug a
where a.price > ( select avg(b.price) from drug b where b.type= a.type)
缺少分组依据?当使用聚合总和、最小值、最大值、平均值时,通常明智的做法是按选择中的非聚合字段分组。由于mySQL实现了扩展的groupby,因此mySQL允许您不使用它们,而引擎可以为groupby中未列出的每一列选择任何值并显示它。因此,由于您没有分组,因此它可以显示任何药物名称;而且,随着数据的变化,它可能会改变在后续运行中选择的内容。此外,Oracle、DB2、SQL Server和许多其他RDBMS都不支持这种类型的语法?为什么你要将行数与价格进行比较?我只需要知道如何获得具有相同类型药物(例如抗生素)的行数的平均值。这怎么可能被投票支持此答案在MySQL服务器上不起作用。。。。MySQL不支持像AS这样的windows函数……我以前曾为PostgreSQL发布过问题,但其他扩展的答案让我了解了解决方案所需的洞察力。很容易找到基于特定函数的等价语法,这些函数只适用于特定的扩展。非常感谢您,这项工作如期进行,我感谢您的帮助和所有人的帮助