簡體   English   中英

GROUP_CONCAT()不能單獨使用嗎?

[英]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.

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