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等