【发布时间】:2013-05-17 03:46:39
【问题描述】:
我的问题与this StackOverflow question 非常相似,显然是common issue 学习SQL。从本质上讲,我正在尝试使用现有的表字段来查找 min() 值。典型的解决方案是创建一个有点自引用的子查询。我从上面的示例中复制了这段代码:
select *
from yourtable t1
inner join
(
select min(A) A, id
from yourtable
group by id
) t2
on t1.id = t2.id
and t1.A = t2.A
然而,在我的示例中,我的 SQL 查询中有许多其他条件,因此,使用示例中列出的子查询将不起作用。换句话说,我有一个现有的查询,它有很多不同的参数,我需要保留和使用这些参数来获得适当的查询结果。我需要附加一些可以有效执行此操作的新代码:
select *
from yourtable t1
inner join
(
select min(A) A, id
from *my existing query results*
group by id
) t2
on t1.id = t2.id
and t1.A = t2.A
如果我要执行第一个示例中列出的操作,我将根据查询中已存在的其他条件选择结果中不存在的最小值。
如果您对这里感兴趣,现有的查询链接如下。它是 Drupal 7 中的 Views 模块使用 uc_catalog 视图生成的查询。然后我使用hook_views_query_alter() 进行更改。我正在使用 MYSQL 数据库。
编辑:也许对我正在尝试做的更好的描述是将 Groupwise Min 任务附加到现有查询并复制它的 WHERE 条件以在 Groupwise 任务中使用。你能告诉我怎么做this in this query吗?
【问题讨论】:
-
让我指出,
select min(A) A, id FROM ... GROUP BY id在大多数 SQL 实现中是非法的,因为A既没有聚合也没有列在 GROUP-BY 列表中。虽然 MySql 表扩展允许这样的语法,但结果将是不可预测的。 -
@PM
A是聚合结果的别名。这很好,花花公子。 -
@Strawberry - 对。应该注意到了。