使用Group时如何在使用聚合时保持其他字段同步
这里我试图在col2 = xxx
select col1, col2, col3, min(col4)
from table
where col2 = 'xxx'
group by col3
我可以在col4中获得最小值,但col1不正确,但是col2,col3,col4是。
有人能告诉我怎么做吗?
由于
答案 0 :(得分:3)
您使用的是非标准MySQL
extension至GROUP BY
。
此查询实际上显示为“对于col3
的每个不同值,请选择col4
的最小值以及col1
和col2
的值table
的行,其值为col3
,没有特定的顺序“
如果我们有以下数据:
col1 col2 col3 col4
---- --- --- ----
A A 1 1
B B 1 2
C C 2 3
D D 2 4
,这个查询:
SELECT col1, col2, col3, MIN(col4)
FROM mytable
GROUP BY
col3
将返回以下任一项:
col1 col2 col3 col4
---- --- --- ----
A A 1 1
C C 2 3
col1 col2 col3 col4
---- --- --- ----
B B 1 1
C C 2 3
col1 col2 col3 col4
---- --- --- ----
A A 1 1
D D 2 3
col1 col2 col3 col4
---- --- --- ----
B B 1 1
D D 2 3
我。即它可以返回在对相应组有贡献的行中找到的col1
和col2
的任何值。
这相当于FIRST_VALUE
分析函数,但没有特别的顺序。
<强>更新强>
要选择与每个组中col1
的最小值对应的col2
和col4
的值,请使用:
SELECT col1, co2, col3, col4
FROM (
SELECT col1, col2, col3, col4,
COALESCE(@col3 = col3, FALSE) AS grp,
@col3 := col3 AS nv
FROM (
SELECT @col3 := NULL
) vars, table
WHERE col2 = 'xxx'
ORDER BY
col3, col4
) q
WHERE NOT grp
答案 1 :(得分:0)
select a.col3, a.col2, a.col1, a.col4
from table as a natural join
(select col3, min(col4) as col4 from table
where col2='xxx'
group by col3 ) as b
where a.col2 = 'xxx' -- sometimes this helps the optimizer even though it's redundant
如果可能有多个行具有相同的col3,col4和col2,但是col1s不同,你可能会遇到一些麻烦 - 用rownums等修复它们非常简单,但这会得到特定于db的行。 / p>
答案 2 :(得分:0)
我猜你想要col1-3对应每个的min(col4) COL3?
类似的东西:
select X.col1, X.col2, X.col3, X.col4 from table X
join (select col3, min(col4) as mcol4 from table where col2='xxx' group by col3) as Y
on X.col3=Y.col3 and X.col4=Y.mcol4
where X.col2='xxx';