- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个查询,它生成一组中最大值的行。它适用于表,但不适用于 View 。分组依据不起作用。代码如下;
SELECT View1.timestamp, View1.person_name
FROM View1
WHERE View1.timestamp IN
(
SELECT MAX(View1.timestamp)
FROM View1
GROUP BY View1.person_name
)
我做错了什么? Group By 可以在 View 上正常工作吗?我正在使用 MySQL。
最佳答案
GROUP BY
在内联 View 中工作,并且在存储 View 中工作。
目前尚不清楚“无法工作”是什么意思。查询是否产生错误或意外的结果?它会抛出错误消息吗?或者说,性能是 G_L_A_C_I_A_L 吗?
NOT IN(子查询)谓词是一条真正的狗。对于从外部查询返回的每一行,MySQL 将运行该子查询。如果这是对 View 的查询,那么 MySQL 将首先运行 View 查询,将结果具体化为临时 MyISAM 表,然后对其运行查询。
这是运行该查询时发生的情况的图片...
execute View1 query from outermost query
populate temporary MyISAM table with the results
fetch first row
evaluate IN predicate
execute subquery to get the list to compare to
execute view1 query
populate temporary MyISAM table with results
find MAX value from MyISAM table
populate another temporary MyISAM table with found MAX values
search the MyISAM table to see if the value from the row matches or not
fetch next row
evaluate IN predicate
execute subquery to get the list to compare to
execute view1 query
populate temporary MyISAM table with results
find MAX value from MyISAM table
populate another temporary MyISAM table with found MAX values
search the MyISAM table to see if the value from the row matches or not
fetch next row
evaluate IN predicate
...
每行都会产生大量开销。所有这些开销都会随着大型集合而增加。
返回等效结果集的更有效方法是使用连接操作,例如
SELECT v.*
FROM View1 v
JOIN ( SELECT MAX(m.timestamp)
FROM View1 m
GROUP BY m.person_name
) p
ON p.timestamp = v.timestamp
使用这种方法,执行计划看起来更像是这样:
execute View1 query and materialize results as temporary MyISAM table m
execute MAX query against m and populate temporary MyISAM table p
execute View1 query and materialize results as temporary MyISAM table v
execute outermost query to find matching rows from temporary tables p and v
View1 查询执行了两次,但至少只执行了两次。虽然仍然存在开销,但它比对 View1 返回的每一行执行 View1 查询要好得多。
同样,当您说“无法工作”时,不清楚您的意思。
您的查询对 person_name 执行 GROUP BY,但外部查询中没有引用 person_name,这有点奇怪。
如果目的是查找每个人的“最新”行,那么我们将包含一个谓词来匹配 person_name 以及时间戳,如下所示:
SELECT v.*
FROM ( SELECT m.person_name
, MAX(m.timestamp) AS latest_timestamp
FROM View1 m
GROUP BY m.person_name
) p
JOIN View1 v
AND v.person_name = p.person_name
AND v.timestamp = p.latest_timestamp
<小时/>
但我不确定这些是否有助于回答您的问题。
<小时/>更新*
要获得与上一个查询中所示相同类型的 person_name
匹配,但使用 IN(子查询)
谓词,您可以使用相关子查询和GROUP BY 不是必需的。
注意:对于大型集合,此方法通常比连接操作效率低得多。它遇到了与原始查询相同的“每行”性能开销问题;对于 v
中的每一行,都会重新执行相关子查询。
SELECT v.timestamp
, v.person_name
FROM View1 v
WHERE v.timestamp IN
( SELECT MAX(m.timestamp)
FROM View1 m
WHERE m.person_name = v.person_name
)
关于mysql - 分组最大值适用于表,但不适用于 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264953/
我在我的 Xcode 项目目录中输入了以下内容: keytool -genkey -v -keystore release.keystore -alias mykey -keyalg RSA \
假设我有一个像这样的 DataFrame(或 Series): Value 0 0.5 1 0.8 2 -0.2 3 None 4 None 5 None
我正在对一个 Pandas 系列进行相对繁重的应用。有什么方法可以返回一些打印反馈,说明每次调用函数时在函数内部进行打印还有多远? 最佳答案 您可以使用跟踪器包装您的函数。以下两个示例,一个基于完成的
我有一个 DataFrame,其中一列包含列表作为单元格内容,如下所示: import pandas as pd df = pd.DataFrame({ 'col_lists': [[1, 2
我想使用 Pandas df.apply 但仅限于某些行 作为一个例子,我想做这样的事情,但我的实际问题有点复杂: import pandas as pd import math z = pd.Dat
我有以下 Pandas 数据框 id dist ds 0 0 0 0 5 1 0 0 7 2 0 0
这发生在我尝试使用 Gradle 构建时。由于字符串是对象,因此似乎没有理由发生此错误: No signature of method: java.util.HashMap.getOrDefault(
您好,有人可以解释为什么在 remaining() 函数中的 Backbone 示例应用程序 ( http://backbonejs.org/examples/todos/index.html ) 中
我有两个域类:用户 class User { String username String password String email Date dateCreated
问题陈述: 一个 pandas dataframe 列系列,same_group 需要根据两个现有列 row 和 col 的值从 bool 值创建。如果两个值在字典 memberships 中具有相似
apporable 报告以下错误: error: unknown type name 'MKMapItem'; did you mean 'MKMapView'? MKMapItem* destina
我有一个带有地址列的大型 DataFrame: data addr 0 0.617964 IN,Krishnagiri,635115 1 0.635428 IN,Chennai
我有一个列表list,里面有这样的项目 ElementA: Number=1, Version=1 ElementB: Number=1, Version=2 ElementC: Number=1,
我正在编译我的源代码,它只是在没有运行应用程序的情况下终止。这是我得到的日志: Build/android-armeabi-debug/com.app4u.portaldorugby/PortalDo
我正在尝试根据另一个单元格的值更改单元格值(颜色“红色”或“绿色”)。我运行以下命令: df.loc[0, 'Colour'] = df.loc[0, 'Count'].apply(lambda x:
我想弄清楚如何使用 StateT结合两个 State基于对我的 Scalaz state monad examples 的评论的状态转换器回答。 看来我已经很接近了,但是在尝试申请 sequence
如果我已经为它绑定(bind)了集合,我该如何添加 RibbonLibrary 默认的快速访问项容器。当我从 UI 添加快速访问工具项时,它会抛出 Operation is not valid whi
在我学习期间Typoclassopedia我遇到了这个证明,但我不确定我的证明是否正确。问题是: One might imagine a variant of the interchange law
我是一名优秀的程序员,十分优秀!