【发布时间】:2021-12-18 17:29:00
【问题描述】:
如果有以下查询(我的查询的简化示例,为了便于阅读):
SELECT make, year, color, count(*)
FROM cars
GROUPY BY make, year, color
ORDER BY 4 DESC;
我想遍历结果表并为每行的条件生成子查询(下面的示例)。然后,我希望使用这些子查询来制作一个包含样本结果(可能是 3 行)的表,该表符合原始查询结果中每一行的标准(例如,因为 2019 年有多个黑色吉普车)。
SELECT * from cars
WHERE make = 'Jeep'
AND year = '2019'
AND color = 'Black';
SELECT * from cars
WHERE make = 'Ford'
AND year = '2018'
AND color = 'Red';
这似乎是一个奇怪或不必要的请求。但是,考虑到我的实际问题的复杂性,我相信这是最好的方法。这是我想要采用的方法,因为我想要一个简化的解决方案,我可以返回并更改以供将来使用和查询的不同变体。
也许我可以使用一个 PLSQL 过程来创建一个临时表来存储每一行的值?我在想我可以将列值存储在变量中,这样我就可以从中构建我的子查询。让我知道您的想法,或者您是否有更好的方法。谢谢!
注意:我使用的是 Oracle SQL Developer
【问题讨论】:
-
幽默我们,您的实际问题是什么?这几乎是对一个简单的分析计数函数的尖叫。
-
随时提供您的方法!只是我遇到的一个问题是,我希望回来并将这个过程重用于不同的查询变体。因此,如果您有一个可以将查询作为输入的函数的想法,那就太好了。
-
已经有一个答案与我的思路相同(只是缺少
count(*) over (partition by make,year,color)) - 一次通过表而不是一加几个额外的查询(需要大索引来支持)
标签: sql oracle stored-procedures plsql