MySql使用同一查询随机检索不同的值?
这个查询有时在某些行中随机给我空值,有时不给。当我将内部联接更改为左联接时,这一切就开始发生了MySql使用同一查询随机检索不同的值?,mysql,sql,stored-procedures,syntax,left-join,Mysql,Sql,Stored Procedures,Syntax,Left Join,这个查询有时在某些行中随机给我空值,有时不给。当我将内部联接更改为左联接时,这一切就开始发生了 CREATE temporary TABLE IF NOT EXISTS surveys_temp AS (SELECT SN.id_rep, Coalesce(( Sum(CASE WHEN SN.score < 7 THEN -100 WHEN SN.s
CREATE temporary TABLE IF NOT EXISTS surveys_temp AS
(SELECT SN.id_rep,
Coalesce(( Sum(CASE
WHEN SN.score < 7 THEN -100
WHEN SN.score >= 7
AND score < 9 THEN 0
WHEN SN.score >= 9 THEN 100
end) / Count(score) ), 0) AS NRS,
SW.wtr
FROM surveys SN
INNER JOIN (SELECT id_rep,
Coalesce(( Sum(CASE
WHEN score < 7 THEN -100
WHEN score >= 7
AND score < 9 THEN 0
WHEN score >= 9 THEN 100
end) / Count(score) ), 0) AS WTR
FROM surveys
WHERE survey_type = 'WTR'
GROUP BY id_rep) SW
ON SW.id_rep = SN.id_rep
WHERE SN.survey_type = 'NRS'
GROUP BY SN.id_rep);
CREATE temporary TABLE IF NOT EXISTS orders_temp AS
(SELECT id_rep,
Sum(Cast(ordernumber AS DECIMAL(2, 0))) AS Orders
FROM orders
GROUP BY id_rep);
CREATE temporary TABLE IF NOT EXISTS chats_temp AS
(SELECT id_rep,
Time_format(Sec_to_time(Cast(Cast(Sum(response_time * -1)/ Count(
id_session) AS
DECIMAL(5, 2
)) AS CHAR(6
))), '%H : %i : %s')AS response_time
FROM chats
WHERE chat_type = 1
GROUP BY id_rep
ORDER BY id_rep);
SELECT R.rep_name,
Count(DISTINCT R.id_session) AS Chats,
O.orders,
Concat(Cast((o.orders/Count(DISTINCT r.id_session)) * 100 AS DECIMAL(5, 2
)), '%'
) AS CONVERSION,
Coalesce(Cast(s.nrs AS DECIMAL(5, 2)), '0') AS NRS,
Coalesce(Cast(s.wtr AS DECIMAL(5, 2)), '0') AS WTR,
C.response_time
FROM reps R
LEFT JOIN surveys_temp AS S
ON S.id_rep = R.id_rep
LEFT JOIN orders_temp AS O
ON O.id_rep = R.id_rep
LEFT JOIN chats_temp AS C
ON c.id_rep = R.id_rep
WHERE R.rep_country IN( 'D.R', 'U.S' )
GROUP BY R.rep_name
ORDER BY R.rep_name;
这里的一个问题是,您违反了,因为您只按R.Rep_名称分组,而选择其他字段,而没有通过聚合函数引入它们,例如,列O.Orders和C.response_time,以及通过Coalesce和Concat导出的列 由于这种冲突,可能不是所有未分组、未聚合列的值在每个Rep_Name group中都具有相同的值,并且结果是不确定的 编辑下面的评论 数据看起来好一点,但有些代表的名字在重复 这似乎证实了非聚合列不是唯一的。因此: 列不能显示在rep_名称组的上下文中, 或者你有比你想象的更多的离散群体 或者,您需要使用聚合(如CountO.Orders、AVGC.response\u time等)限定非不同列,然后更改列标题(如TotalOrders、averagerresponsetime等)
你有没有试着对结果进行排序,看看它的数据是否真的不同?或者只是不同的表演?ORDER BYIt’s real different data,我已经比较了很多次了。很抱歉,StuartLC,但你能解释得更清楚一点吗?我不明白。我包括了几个链接。不幸的是,MySql允许这样做。其他RDBMS系统,如Oracle和Sql Server,如果您违反单值规则,将不允许您分组。哦,我明白您现在说的,您的意思是我应该将不用于aggr函数的列添加到组中。我按您所说的做了,现在数据看起来稍微好一点,但一些代表的名称确实在重复,因此,非聚合列中的数据不是唯一的。这是你的难题:要么列不能在rep_名称组的上下文中显示,要么组比你想象的多,要么你需要使用聚合(如CountO.Orders、AVGC.response_time等)来限定非独立列,然后更改列标题,例如TotalOrders、AveragerResponseTime等