[英]GROUP_CONCAT() can't be used by itself?
我有一個產品表,想要選擇所有ID作為逗號分隔的字符串。 當我運行以下查詢時:
SELECT GROUP_CONCAT(p.id SEPARATOR ',') FROM products p GROUP BY 1
我收到錯誤:
無法在'GROUP_CONCAT(p.id SEPARATOR',')'上分組
但是,如果我將查詢更改為:
SELECT id, GROUP_CONCAT(p.id SEPARATOR ',') FROM products p GROUP BY 1
然后,它為每個包含兩列的產品返回一行,每列中都有匹配的產品ID。 這不是我想要的,但是我正在顯示此查詢以證明選擇其他列會導致錯誤消失。
為什么不能單獨使用GROUP_CONCAT()?
如果要將所有找到的行分組為一個,則根本不需要GROUP BY
子句。
從文檔 :
如果在不包含GROUP BY子句的語句中使用組函數,則等效於對所有行進行分組。
您應該能夠做到:
SELECT GROUP_CONCAT(p.id SEPARATOR ',') FROM products p
請注意, SEPARATOR ','
是默認設置 ,您可以使用:
SELECT GROUP_CONCAT(p.id) FROM products p
根據SELECT
語句的文檔 ,您可以將位置傳遞給GROUP BY
,它將按該列分組。
可以在ORDER BY和GROUP BY子句中使用列名,列別名或列位置引用選擇用於輸出的列。 列位置是整數,並且以1開頭。不推薦使用列位置,因為該語法已從SQL標准中刪除。
因此, GROUP BY 1
被解釋為GROUP BY GROUP_CONCAT(p.id SEPARATOR ',')
,這沒有任何意義。
只要這樣做:
create table products (id int);
insert into products values (1), (2), (3);
select group_concat(id separator ',') from products;
結果:
+--------------------------------+
| group_concat(id separator ',') |
+--------------------------------+
| 1,2,3 |
+--------------------------------+
使用時:
SELECT id, GROUP_CONCAT(p.id SEPARATOR ',') FROM products p GROUP BY 1
您正在按ID分組
如果這是您想要的,可以嘗試:
SELECT GROUP_CONCAT(p.id SEPARATOR ',') FROM products p GROUP BY id
如果只需要一行,所有ID都用'分隔,則只需要:
SELECT GROUP_CONCAT(id) FROM products
為了使GROUP BY正常工作,您需要用於分組的列,並且該列必須包含在所選字段中。 當您編寫GROUP BY 1時,它實際上是按第一列分組的。
如果只想對所有行進行分組(而不是按任何列),則可以使用一個虛擬列,該列對於所有行都是相同的。 像這樣 :
SELECT 'test', GROUP_CONCAT(p.id SEPARATOR ',') FROM products p GROUP BY 1
或者完全刪除GROUP BY
SELECT GROUP_CONCAT(p.id SEPARATOR ',') FROM products p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.