我有两个表,TABLE_A 和 TABLE_B。这就是我想要做的:获取 TABLE_A 中所有唯一出现的 FIELD_2,以及每个出现次数最多的 FIELD_1。然后,仅选择我在那里的FIELD_1,其中TABLE_B中相应的FIELD_3不是“OK”。 (FIELD_1 存在于 TABLE_A 和 TABLE_B 中。)
首先,我从一种简单的方法开始,如上所述,我分三步完成了此操作。 (要了解我做了什么,最简单的方法是从第 1 步开始,然后向外进行,这就是我编写代码的方式):
/* START Step 3 – Take only those of the highest FIELD_1 from TABLE_A, where the corresponding FIELD_3 in TABLE_B is not ‘OK’ */
SELECT DISTINCT
FIELD_1
FROM
TABLE_B
WHERE
FIELD_1 IN
(
/* START Step 2 – Take only the highest FIELD_1 from Step 1 */
SELECT
MAXFIELD_1
FROM
(
/* START Step 1 – Take the highest FIELD_1 for all of the FIELD_2 which are in TABLE_A */
SELECT
FIELD_2,
MAX(FIELD_1) MAXFIELD_1
FROM
TABLE_A
GROUP BY
FIELD_2
/* END Step 1 */
)
/* END Step 2 */
)
AND
FIELD_3 <> 'OK'
/* END Step 3 */
但是,当我继续做我想做的事情时,这变得越来越丑陋,我正在寻找一种通过使用 JOIN 语句来缩短它的方法。起初我尝试过这个:
SELECT
A.FIELD_2,
MAX(A.FIELD_1) FIELD_1
FROM
TABLE_A A
INNER JOIN TABLE_B B ON A.FIELD_1 = B.FIELD_1
WHERE
B.FIELD_3 <> 'OK'
GROUP BY
A.FIELD_2
不幸的是,现在似乎发生的是 MAX(A.FIELD_1) 返回 TABLE_A 中最高的 FIELD_1,其中对应的 FIELD_3 <>“OK”。换句话说,首先应用 where 语句,然后选择最高的 FIELD_1。我需要首先选择 A.FIELD_2 和 MAX(A.FIELD_1),之后,仅选择 B.FIELD_3 <>“确定”的情况。
我该怎么做?
最佳答案
我不明白您在哪里应用了第一个要求:
Take all unique occurrences of FIELD_2 in TABLE_A
我期待看到 DISTINCT
您的查询中的关键字。
尽管如此,如果你想过滤 B.FIELD_3 <> 'OK'
获取字段后 A.FIELD_2
和MAX(A.FIELD_1)
,您可以使用HAVING
条款。
SELECT
A.FIELD_2,
MAX(A.FIELD_1) FIELD_1,
B.FIELD_3,
FROM
TABLE_A A
INNER JOIN TABLE_B B ON A.FIELD_1 = B.FIELD_1
GROUP BY
A.FIELD_2
HAVING
FIELD_3 <> 'OK'
关于mysql - 在采用 where 条件之前应用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433301/