簡體   English   中英

MySQL查詢中的奇怪結果

[英]Weird result in MySQL query

我有這個查詢:

SELECT COUNT(1), name, (@i := @i + 1) AS counter FROM mytbl, (SELECT @i := 0) tmp_tbl GROUP BY counter

對於此查詢,counter列的值增加2。

但是,如果我刪除了COUNT(1),例如:

SELECT name, (@i := @i + 1) AS counter FROM mytbl, (SELECT @i := 0) tmp_tbl GROUP BY counter

計數器列的值增加1。

誰能解釋為什么這種行為?


表將是: create table mytbl (name VARCHAR(20));

附帶數據:

INSERT INTO mytbl VALUES ('a1'), ('a2'), ('a3');

MySQL文檔中所述 ,我們不應為用戶變量分配值,而應在同一條語句中讀取該值。 我們可能會得到預期的結果,但這不能保證。 更改語句(例如,通過添加GROUP BY,HAVING或ORDER BY子句)可能會導致MySQL選擇評估順序不同的執行計划。

在您的查詢中, 計數器字段將在SELECT語句中求值,然后在GROUP BY語句中使用。 似乎當我們將聚合函數添加到SELECT語句時,在GROUP BY語句中使用的字段將被評估2次。

我已經創建了一個演示 ,您可以檢查一下。 在演示中,我有這個查詢

SELECT Count(1), 
       name, 
       ( @i := @i + 1 ) AS counter, 
       ( @j := @j + 1 ) AS group_field 
FROM   (SELECT 'A' AS name 
        UNION 
        SELECT 'B' AS name 
        UNION 
        SELECT 'C' AS name) mytable, 
       (SELECT @i := 0) tmp_tbl, 
       (SELECT @j := 0) tmp_tbl1 
GROUP  BY group_field;   

在執行結果中, 計數器字段僅增加1,組字段增加2。

要使計數器字段僅增加1,您可以嘗試以下操作

SELECT Count(1), 
       name, 
       counter 
FROM   (SELECT name, 
               ( @i := @i + 1 ) AS counter 
        FROM   mytbl, 
               (SELECT @i := 0) tmp_tbl) data 
GROUP  BY counter; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM