mysql 在group concat 里面写 case
时间: 2023-10-10 13:04:44 浏览: 160
在 MySQL 的 GROUP_CONCAT 函数中,可以使用 CASE 表达式来根据特定条件进行聚合操作。下面是一个示例:
假设我们有以下订单表:
```
order_id | customer_id | order_date | total_amount
-------- | ----------- | ---------- | ------------
1 | 1 | 2021-01-01 | 100
2 | 1 | 2021-02-01 | 200
3 | 2 | 2021-01-15 | 150
4 | 3 | 2021-02-15 | 50
5 | 3 | 2021-03-01 | 100
```
现在我们想要按照每个客户的订单数量来聚合数据,并将结果用逗号分隔。如果客户的订单数量为 1,则显示字符串 "only one order";如果客户的订单数量大于 1,则显示订单数量。可以使用以下 SQL 语句实现:
```sql
SELECT
customer_id,
GROUP_CONCAT(
CASE
WHEN cnt = 1 THEN 'only one order'
ELSE CAST(cnt AS CHAR)
END
ORDER BY order_date SEPARATOR ', '
) AS order_summary
FROM (
SELECT
customer_id,
COUNT(*) AS cnt
FROM orders
GROUP BY customer_id
) t
GROUP BY customer_id;
```
以上 SQL 语句的执行结果如下:
```
customer_id | order_summary
----------- | -------------
1 | 2
2 | only one order
3 | 2, only one order
```
解释:
- 内部查询使用 COUNT 函数对每个客户的订单数量进行聚合,并将结果存储在一个名为 t 的临时表中。
- 外部查询使用 GROUP_CONCAT 函数将每个客户的订单数量聚合成一个字符串,并根据每个客户的订单日期进行排序。在 GROUP_CONCAT 函数中,使用 CASE 表达式根据订单数量是否为 1 来显示相应的文本。
阅读全文