gpt4 book ai didi

sql - 是否可以执行从不同列中选择两个最大值/最小值的单个 SQL 查询?

转载 作者:行者123 更新时间:2023-12-03 19:23:08 28 4
gpt4 key购买 nike

我开始使用 SQLite .我已经完成了一对教程,这些教程让我对 SQL 有一个全局 View 。陈述。我想我可以通过几个简单的查询来完成我的任务。但是,出于学术原因,我想将它们组合成一个更复杂的查询。

先来看看我的问题,假设我有这张表PRODUCTS:

+---------+-------+--------+-------------+
| Product | Kcal | Price | Supermarket |
+---------+-------+--------+-------------+
milk 300 1.01 Carrefour
eggs 75 1.50 Carrefour
bread 400 1.99 Carrefour
milk 150 1.20 Lidl
eggs 50 2.00 Lidl
bread 300 1.50 Lidl

假设我想要这个输出:
+-------------+----------+---------+-----------+---------+
| Supermarket | Max Kcal | Product | Min Price | Product |
+-------------+----------+---------+-----------+---------+
Carrefour 400 bread 1.01 milk
Lidl 300 bread 1.20 milk

我检索与最大/最小值关联的键的简单查询是:
sql = ('SELECT PRODUCT, Supermarket '
'from PRODUCTS '
'where KCAL = (SELECT MAX(KCAL) from PRODUCTS) ')

我尝试使用 GROUP BY语句以检索按“超市”分组的所有最大“千卡”。
sql = ('SELECT Supermarket, MAX(KCAL), Product '
'from PRODUCTS '
'group by Supermarket '
'order by Supermarket ')

以及按“超市”分组的所有最低“价格”。
sql = ('SELECT Supermarket, MIN(Price), Product '
'from PRODUCTS '
'group by Supermarket '
'order by Supermarket ')

但是,我没有找到任何关于如何将这两个查询组合在一起的线索,目的是一次访问数据库并减少花费的时间。

甚至可能吗?还是我被迫做几个查询?

我可能过度简化了我的问题,但是我有一个 500MB 的数据库,其中包含大量表,每次我都需要一个按公共(public)键(“超市”)排序的最大/最小值。我需要很多查询,每次都需要几分钟...

我想知道如果千卡和价格在不同的表中是否会有所不同,我还没有尝试组合来自不同表的查询(我从简单到复杂)。

谢谢你!

最佳答案

这个想法是创建两个表。

第一个表(例如表 A)包含 Supermarket、Max Kcal、Product

第二个表(例如表 B)包含超市、最低价格、产品

然后您可以将两个表连接到一个表中。这可以在一个查询中完成。看我的回答here

查询将如下所示:

SELECT A.supermarket, 
A.max_kcal,
C.NAME,
B.min_price,
D.NAME
FROM (SELECT supermarket,
Max(kcal) AS max_kcal
FROM product
GROUP BY supermarket) AS A
JOIN (SELECT supermarket,
Min(price) AS min_price
FROM product
GROUP BY supermarket) AS B
ON A.supermarket = B.supermarket
JOIN product C
ON C.kcal = A.max_kcal
AND C.supermarket = A.supermarket
JOIN product D
ON D.price = B.min_price
AND D.supermarket = B.supermarket
ORDER BY A.supermarket;

我使用附加表 C 和 D 来获取产品名称。
希望这可以帮助。

关于sql - 是否可以执行从不同列中选择两个最大值/最小值的单个 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47534762/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com