【发布时间】:2018-12-16 05:27:36
【问题描述】:
我正在尝试使用以下多个连接将来自其他表的结果包含在 previous 查询中:
SELECT mid as mID,
round((x.qty_sum / x.qty_count), 5) as qtAVG,
round(x.qty_stddev, 5) as qtSTDDEV,
x.qty_count as qtCOUNT,
round((x.rel_sum / x.rel_count), 5) as relAVG,
round(x.rel_stddev, 5) as relSTDDEV,
x.rel_count as relCOUNT,
FROM (SELECT t.mid,
SUM( mt = 'qt' ) as qty_count,
SUM(CASE WHEN t_r.mt = 'qt' THEN rt END) as qty_sum,
STD(CASE WHEN t_r.mt = 'qt' THEN rt END) as qty_stddev,
SUM( t_r.mt = 'rel' ) as rel_count,
SUM(CASE WHEN t_r.mt = 'rel' THEN rel END) as rel_sum,
STD(CASE WHEN t_r.mt = 'rel' THEN rel END) as rel_stddev
FROM t_r r
right join t_m t on t.mid = r.mid
right join m_k m on m.mid = t.mid
right join k_d k on m.kid = k.kid
GROUP BY t.mid
) x;
使用我上面的查询,当mt 为qt 时,qty_count for 111 返回6 而不是2。 2 * (count of 111 in table m_k)
当我删除这部分连接时,我得到了 qtCOUNT 和 relCOUNT 的所需总和
right join m_k m on m.mid = t.mid
right join k_d k on m.kid = k.kid
我做错了什么,我该如何解决?
数据:
m_k
mid kid
--------
109 2
110 2
110 4
111 1
111 2
111 3
k_d
kid k_desc
-----------
1 desc1
2 desc2
3 desc3
4 desc4
m_d
mid col1 col2 col3 col4
-------------------------------
109 val_a val_d val_g val_j
110 val_b val_e val_h val_k
111 val_c val_f val_i val_l
t_r
mid rt stamp mt
----------------------------------
111 3 2018-12-08 01:30:31 rel
111 4 2018-12-08 03:41:56 qt
111 3 2018-12-08 02:29:10 qt
110 1 2018-12-08 06:13:51 rel
110 5 2018-12-08 11:44:39 qt
109 1 2018-12-08 10:39:51 rel
实现与上述相同的其他查询也可以。
【问题讨论】:
-
可能是因为 laravel 标签 ;-)
-
我们不知道发生了什么——
mt和mid在哪个表中?请编辑查询以使其符合条件。 -
请为每张桌子提供
SHOW CREATE TABLE。 -
您提供了表
m_d的数据(未在您的查询中使用)并省略了表t_m的示例数据(您在查询中引用)。没有t_m的数据,很难帮你;因为您没有为表格使用助记符名称,因此必须对丢失的数据做出假设。