Mysql 根据聚合结果选择字段

Mysql 根据聚合结果选择字段,mysql,sql,Mysql,Sql,我有一个典型的products表,其中包含字段名称和价格。我必须选择所有价格的总和、最便宜产品的名称和最昂贵产品的名称,然后在相同的结果集中返回所有价格。我尝试了一些组合,但我能想到的最好的组合是一个带有多个嵌套子选择的丑陋查询。有谁能帮我举一个好的查询示例吗?提前谢谢 为了说明这个问题,这里有一个极简产品表: 根据上表,查询必须返回以下结果集: total_pricing = 17.30 cheapest_product = Poor Man's Ale m

我有一个典型的products表,其中包含字段名称和价格。我必须选择所有价格的总和、最便宜产品的名称和最昂贵产品的名称,然后在相同的结果集中返回所有价格。我尝试了一些组合,但我能想到的最好的组合是一个带有多个嵌套子选择的丑陋查询。有谁能帮我举一个好的查询示例吗?提前谢谢

为了说明这个问题,这里有一个极简产品表:

根据上表,查询必须返回以下结果集:

          total_pricing = 17.30
       cheapest_product = Poor Man's Ale
 most_expensive_product = Irish Stout
检查


这里有几个选项供您选择:

或在单独的行中:

SELECT 'total_pricing' as Category, SUM(p.price) AS total_pricing
FROM products p
UNION
(
  SELECT 'cheapest_product', name
  FROM products
  ORDER BY price 
  LIMIT 1
)
UNION
(
  SELECT 'most_expensive_product', name
  FROM products
  ORDER BY price DESC
  LIMIT 1
);

我只是想问一下,如果你有一个以上最便宜/最昂贵的产品,会发生什么?我有过这样的想法,但我没有在示例中包含这个约束。谢谢你的洞察力!它实现了目标,但它依赖于秩序,我认为这不是什么语义,但我认为这可能是最清晰的解决方案。谢谢!查询返回价格以及名称,并在三行中生成价格。我在问题中没有详细说明。我的错。顺便说一句,我从你的SQL中学到了一些新东西。非常感谢你的回答!
SELECT DISTINCT price,
                name
FROM products AS p1,

  (SELECT MAX(price) AS `most_expensive_product`,
          MIN(price) AS `cheapest_product`
   FROM products) AS p2
WHERE p2.most_expensive_product = p1.price
  OR p2.cheapest_product = p1.price
UNION
SELECT sum(price) AS price,
       "Total_pricing" AS name
FROM products;
SELECT SUM(p.price) AS total_pricing,
(
   SELECT name
   FROM products
   ORDER BY price 
   LIMIT 1
)AS cheapest_product,
(
   SELECT name
   FROM products
   ORDER BY price DESC
   LIMIT 1
)AS most_expensive_product
FROM products p;
SELECT 'total_pricing' as Category, SUM(p.price) AS total_pricing
FROM products p
UNION
(
  SELECT 'cheapest_product', name
  FROM products
  ORDER BY price 
  LIMIT 1
)
UNION
(
  SELECT 'most_expensive_product', name
  FROM products
  ORDER BY price DESC
  LIMIT 1
);