Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用子查询显示具有相同值的多个答案_Mysql_Sql_Database - Fatal编程技术网

Mysql 使用子查询显示具有相同值的多个答案

Mysql 使用子查询显示具有相同值的多个答案,mysql,sql,database,Mysql,Sql,Database,我想展示这个有最高奖的产品(按制造商分组)。但是,如果两个产品拥有相同的奖项,SQL将向我展示其中的一个 SELECT name, manufacturer, MAX(prize) FROM products p GROUP BY manufacturer HAVING MAX(prize) = (SELECT MAX(p1.prize) FROM products p1 WHERE p.manufacturer = p1.

我想展示这个有最高奖的产品(按制造商分组)。但是,如果两个产品拥有相同的奖项,SQL将向我展示其中的一个

SELECT name, manufacturer, MAX(prize)
FROM products p
GROUP BY manufacturer
HAVING MAX(prize) = (SELECT MAX(p1.prize)
                  FROM products p1
                  WHERE p.manufacturer = p1.manufacturer
                  LIMIT 1
                 );

您似乎想要一个简单的子查询--外部查询中没有聚合:

SELECT p.*
FROM products p
WHERE p.prize = (SELECT MAX(p2.prize)
                 FROM products p2
                 WHERE p2.manufacturer = p.manufacturer
                );
如前一个问题所述,您使用的
分组依据
不正确。在
SELECT
中有未聚合的列,这些列不在
分组依据中

在外部查询中使用聚合是每个制造商只能得到一行的原因


就性能而言,这通常是最快的方法——具有正确的索引。在本例中,正确的索引位于
(制造商,奖品)

您似乎想要一个简单的子查询——外部查询中没有聚合:

SELECT p.*
FROM products p
WHERE p.prize = (SELECT MAX(p2.prize)
                 FROM products p2
                 WHERE p2.manufacturer = p.manufacturer
                );
如前一个问题所述,您使用的
分组依据
不正确。在
SELECT
中有未聚合的列,这些列不在
分组依据中

在外部查询中使用聚合是每个制造商只能得到一行的原因


就性能而言,这通常是最快的方法——具有正确的索引。在这种情况下,右索引位于
(制造商,奖品)

首先选择maufacturer的所有最高奖品组,并连接到主表:

select p.* from
(select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
inner join products p
on m.manufacturer = p.manufacturer and m.maxprize = p.prize
order by p.manufacturer, p.name 

请参见

首先选择maufacturer的所有最高奖项组并加入主表:

select p.* from
(select manufacturer, MAX(prize) AS maxprize from products GROUP BY manufacturer) AS m
inner join products p
on m.manufacturer = p.manufacturer and m.maxprize = p.prize
order by p.manufacturer, p.name 

参见

样本数据和期望结果将有所帮助。样本数据和期望结果将有所帮助。