我知道很多问题已经在这个问题上得到了回答,但是我仍然无法理解为什么下面的问题不起作用。我的主要目标是加入一个价格和产品表,并选择每种产品最便宜的价格,根据每三个因素。
为了进行快速测试,我只是筛选了我的价格表,其中包含了相应的产品、价格、rrp和一些列的参考信息,以便知道何时应用哪个价格。
SELECT product_ref_id, price, rrp WHERE (.... filter by attributes ....).这很好,但是为了保持一致性,我至少可以得到2行。问题是我想得到最便宜的价格,但我也需要rrp来显示。于是我走过去,做了:
SELECT product_ref_id, min(price), rrp WHERE (.... filter by attributes ....) GROUPY BY product_ref_id这给了我错误#1055:
#1055 - SELECT list的表达式#3不是按子句分组,而是包含非聚合列'igros_backend.prices.rrp‘,它在功能上不依赖于按子句分组的列;这与sql_mode=only_full_group_by不兼容。
一旦我省略了rrp选择,它就工作得很好,但是我无法得到我的rrp ( rrp也可以在结果上有所不同)。如果我将rrp放入我的group_by中,那么每个id得到的结果超过一个,这也不是它想要的方式。正如我所读到的,禁用only_full_group_by并不是一条路。我的大脑哪里出问题了有什么帮助吗?
这是否是因为并非所有的rrp都有固定的价格,但也可以是空的?编辑:事实上,每个条目都有自己的id,所以在我看来,在使用子查询时,最合理的方法是根据我的条件预先筛选表,将id与价格和uvp连接起来,然后按my min( price )选择,然后按after分组。
进一步编辑:由于我只是无法使它工作,我将解释所有的更详细。这是我的桌子
id product_id_ref filterOption filterOptionCode price rrp对于每个product_id_ref,表中可能有一个或多个条目。我必须检查filterOption是否适用(这取决于记录的用户)。所以我至少得到一个结果回来,大部分是2个,但更多也是可能的。
效果很好..。如果我只想要价格和product_ref_id的话。问题可能是我多次返回相同的product_id_ref?
发布于 2020-12-07 08:36:35
当您在子查询中找到最低价格时,您可以得到它:
SELECT
sub.product_ref_id,
sub.price,
sub.product_id,
sub.id,
main.rrp
FROM
{table} AS main
JOIN
(SELECT
product_ref_id,
MIN(price),
product_id,
MIN(id)
WHERE
[... filter by attributes ....]
GROUP BY
product_ref_id, product_id
) AS sub ON sub.product_ref_id = main.product_ref_id AND sub.price = main.price AND sub.id = main.id AND sub.product_id = main.product_id;因此,在一个子查询中,您将得到包含最小价格的字段,并使用这个结果集与原始表记录连接。这样,您就可以以最小价格获得行的其余字段。
https://stackoverflow.com/questions/65178288
复制相似问题