- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在一个查询中创建多个 Z 分数 [(value-AVG)/STD] 并过滤它们。
到目前为止,我想到了这个;然而,在你看它之前,有一些法语词,“quartier”就像一个地区/自治市镇,“prix”是一个价格。
SELECT ((t1.prix-A1.HMEAN)*100/A1.STD_SAMPLE) AS Z,
q.myId AS q_myId
FROM immobilier_ad_blank AS t1
LEFT JOIN Adresse AS a ON t1.adresse_id=a.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
CROSS JOIN (
SELECT AVG(t2.prix) AS HMEAN,
STD(t2.prix) AS STD_SAMPLE,
q.myId AS quartier_myId
FROM immobilier_ad_blank AS t2
LEFT JOIN Adresse AS a ON t2.adresse_id=a.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
GROUP BY quartier_myId
) AS A1 ON q.myId = A1.quartier_myId
它似乎有效,但我不确定我这样做是否正确,我只添加了一个过滤条件,但我将添加多达 6 个条件,到目前为止,这种方法看起来非常麻烦。
最终看起来像这样
SELECT
((t1.prix-A1.HMEAN)*100/A1.STD_SAMPLE) AS Z1,
((t1.prix-A2.HMEAN)*100/A1.STD_SAMPLE) AS Z2,
((t1.prix-AN.HMEAN)*100/A1.STD_SAMPLE) AS ZN,
All Relevant selects
FROM immobilier_ad_blank AS t1
All Relevant LEFT Joins
CROSS JOIN (
SELECT AVG(t2.prix) AS HMEAN,
STD(t2.prix) AS STD_SAMPLE,
q.myId AS quartier_myId
FROM immobilier_ad_blank AS t2
LEFT JOIN Adresse AS a ON t2.adresse_id=a.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
GROUP BY quartier_myId
) AS A1 ON q.myId = A1.quartier_myId
CROSS JOIN (
SELECT AVG(t2.prix) AS HMEAN,
STD(t2.prix) AS STD_SAMPLE,
q.myId AS quartier_myId
FROM immobilier_ad_blank AS t3
Other Joins
Group By Other conditions
) AS A2 ON OtherConditions
CROSS JOIN (
SELECT AVG(tN.prix) AS HMEAN,
STD(tN.prix) AS STD_SAMPLE,
q.myId AS quartier_myId
FROM immobilier_ad_blank AS tN
Other Joins
Group By Other conditions
) AS AN ON OtherConditions
这是在mysql中,按照手动cross join = inner join = join。然而,据我所知,交叉连接是表 X 表,但在我的例子中,因为它返回聚合,我想它不是 t^2 而是 t*(聚合数)对吗?
我在正确的轨道上吗?优化明智?我是否将过滤放在正确的位置?
我基本上想选择所有行,找到它们的连接值的平均值函数,计算它们的 Z 分数,并在不到 5 秒的时间内将它们加起来,数据量约为 100 万。
编辑 1:
我会简化我的问题,
SELECT
((t1.prix-A1.HMEAN)*100/A1.STD_SAMPLE) AS Z,
((t1.prix-A2.HMEAN)*100/A2.STD_SAMPLE) AS Z2,
q.myId AS q_myId,
c.myId AS c_myId,
s.myId as size_myId
FROM immobilier_ad_blank AS t1
LEFT JOIN Size AS s ON t1.size_id=s.id
LEFT JOIN Adresse AS a ON t1.adresse_id=a.id
LEFT JOIN City AS c ON a.city_id=c.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
CROSS JOIN (
SELECT AVG(t2.prix) AS HMEAN,
STD(t2.prix) AS STD_SAMPLE,
q.myId AS quartier_myId
s.myId as size_myId
FROM immobilier_ad_blank AS t2
LEFT JOIN Size AS s ON t2.size_id=s.id
LEFT JOIN Adresse AS a ON t2.adresse_id=a.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
GROUP BY quartier_myId, size_myId
) AS A1 ON q.myId = A1.quartier_myId
AS A2 on s.myId=A2.size_myId #<--------- Is this line possible ?
编辑 3:
我最终使用了临时表并复制了它们,因为在我的案例中, View 比临时表慢得多,即使底层数据已正确索引。
CREATE TEMPORARY TABLE IF NOT EXISTS A1 AS (
SELECT AVG(t2.prix) AS HMEAN,
STD(t2.prix) AS STD_SAMPLE,
s.myId AS size_myId,
q.myId AS quartier_myId
FROM immobilier_ad_blank AS t2
LEFT JOIN Size AS s ON t2.size_id=s.id
LEFT JOIN Adresse AS a ON t2.adresse_id=a.id
LEFT JOIN Quartier AS q ON a.quartier_id=q.id
GROUP BY quartier_myId,size_myId);
CREATE TEMPORARY TABLE A2 LIKE A1;
INSERT A2 SELECT * FROM A1;
SELECT
((c.prix-A1.HMEAN)*100/A1.STD_SAMPLE) AS Z1,
((c.prix-A2.HMEAN)*100/A2.STD_SAMPLE) AS Z2,
q.myId AS quartier_myId,
s.myId AS size_myId
FROM immobilier_ad_blank AS c
LEFT JOIN Size AS s ON c.size_id=s.id
LEFT JOIN Adresse AS ad ON c.adresse_id=ad.id
LEFT JOIN Quartier AS q ON ad.quartier_id=q.id
JOIN A1 on A1.quartier_myId = q.myId
JOIN A2 AS A2 on A2.size_myId = s.myId
基本上,加入同一个虚拟表(子查询)=== Views ||临时表老实说,我最终可能会创建一个永久表并每天更新一次......
最佳答案
CROSS JOIN ... ON condition
使交叉连接成为普通的 INNER JOIN
或者,为简洁起见,只是 JOIN
。所以不用担心组合爆炸。正确编写的 ON
条件会阻止它。简而言之,忘掉 CROSS JOIN
。只需编写 JOIN
。
你可以像这样写你的JOIN
FROM table_a AS a
JOIN table_b AS b ON a.id = b.id
或者,您可以将 table_a 或 table_b 或两者表示为子查询。例如,您可以编写此查询。
FROM table_A AS a
JOIN (
SELECT MAX(id) id, district
FROM table_b
GROUP BY district
) AS b on a.id = b.id
换句话说,您可以交替使用物理表 (table_b
) 或虚拟表(子查询)。
在您的例子中,您的子查询是一个包含四列的表:(HMEAN、STD_SAMPLE、quartier_myId 和 size_myId)。
您将如何将该表连接到查询中的其余表?
你有密码
JOIN (subquery) AS A1 ON q.myId = A1.quartier_myId
但是,要使用子查询的第四列 (size_myId),您还需要将它用于 JOIN。为此,请将 AND
放在 ON
子句中。做这样的事情:
JOIN (subquery) AS A1 ON q.myId = A1.quartier_myId
AND s.myId = A.size_myId
如果 s.myId 的含义是正确的,那应该会给你一个有用的结果。
复合 ON
子句非常有用。你可以这样做:
LEFT JOIN (subquery) AS A1 ON q.myId = A1.quartier_myId
AND s.myId = A.size_myId
AND A.HMEAN > 7.5
过滤你的结果。
关于php - 多个 SubSelect 内部连接 Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814320/
我有两个表 项目 confirmmasterdetail 我想从item表中选择不在confirmmasterdetail表中的记录当我运行此查询时,它返回空结果集。 SELECT itemId ,
所以我想为一个项目做以下事情。 我有 3 个表。前两个我们现在关心(第三个是为了让您更好地理解): author {id, name} authorship {id, id1, id2} paper
我有 2 张 table 交易表 +----+----------+-----+---------+---- | TID | CampaignID | DATE |
我有 2 个表:订单和预订。 订单表包含来自客户的唯一订单。每个客户都预订了 1 到 5 年的储物柜,因此预订表可以包含 1 到 5 行 pr。顺序(每年 1 行)。预订表中的每一行都包含 end_d
我正在尝试从 sql 查询中获取选择的逆。这是我的场景,我通过查询选择与一个家庭相关的付款,那些在过去 6 个月内捐款的人被认为是活跃的。我对过去 6 个月内没有条目的人感兴趣。 我可以选择过去 6
我有三个表: 帖子:id, title, authorId, text 作者:id, 名字, 国家 评论:id, authorId, text, postId 我想运行一个 mysql 命令,该命令选
我正在为这种简单的和平代码而伤脑筋,它不想工作,而且我想不出任何其他解决方案... 你能帮忙让它工作吗? SELECT chart FROM chart WHERE (select count(use
我正在尝试生成一份销售报告,其中列出每个产品 + 给定月份的总销售额。这有点棘手,因为产品价格可能会在整个月内发生变化。例如: 在 1 月 1 日和 1 月 15 日之间,我的公司以每个 10 美元的
我是 hibernate 的新手。我需要了解以下问题: (1) hibernate mapping中的subselect是什么? (2) 如何在 hbm 文件中映射 subselect? (3) 如果
我有一个这样的表: +--------------+--------------+--------------+ | userid | username | proxy
我正在尝试做这样的事情,但使用 Criteria 而不是 HQL: select user from User where user in ( select user from UserDom
我有两个表 [Users] 和 [Teams]。我的用户表看起来像这样 [ID][E-Mail]。我的 Teams 表看起来像这样 [Team][UserID]。 我需要像这样做一个子选择: SELE
有一些我正在努力工作的选择 SELECT DISTINCT a.client_key, client_name FROM Bloggers AS a LEFT JOIN BloggersPosts A
我有两个表,我想减少比较两个表之间的记录所花费的时间。我无法内部连接我的两个表,因为它们都是纵向表,这意味着 animalid 可以重复多个,即使它对于 milk 记录是唯一的 表1(我的错误表) +
我有两个具有相同字段但来自不同表的对象(foo_something 和 bar_something 实际上不是普通表,有几个连接操作的结果)。我使用 @Subselect hibernate 注释来获
有什么方法可以从模式名称取自主选择中字段之一的值的模式进行子选择?有点像这样: create schema a; create table a.foo(id int); create schema b
使用 postgresql 我有一个表 A,其中包含列 company_name、department_name、一些其他数据和 department . 我有另一个表 B,其中只有 company_
此查询未在合理时间内完成: mysql> select * from prices where symbol='GOOG' and date in (select max(date) from pri
所以,我有一张捐款表。它存储一个 $ 值和一个列框,他们可以在其中选择货币或实物捐赠。实物捐赠可以有美元,但通常没有。实物捐赠是指有人捐赠了实物元素,例如割草机、 table 、椅子等。然后我有捐助者
当查询包含数百万文档的 MongoDB 集合以及对非索引字段进行过滤或排序时,查询运行速度太慢,因为 mongo 需要扫描整个集合。在 Mysql 上,这可以通过执行仅过滤最后 40k 行的子选择来实
我是一名优秀的程序员,十分优秀!