【问题标题】:keep distinct key and concat column [closed]保持不同的键和连接列[关闭]
【发布时间】:2025-11-27 13:55:01
【问题描述】:

我有一个翻译表格,例如:

|     key        |    language    |    value
----------------------------------------------
|       hi       |      en        |    hello
|       hi       |      es        |    hola
|       delete   |      en        |    value
|       delete   |      es        |    suprimir
|       city     |      en        |    
|       city     |      es        |    ciudad

目前有 2 种语言,但我稍后会添加更多。 我正在尝试找到一个 sql 查询,其中将“key”和 concat“language” 组合为非空值。

我正在寻找这个输出:

|    key    |   languages   |     translated
---------------------------------------------------
|    hi     |     en,es     |       100%
|   delete  |     en,es     |       100%
|    city   |     es        |       50%

有什么想法吗?

【问题讨论】:

标签: mysql group-concat


【解决方案1】:

您可以在单个查询中这样做

select `key`,
group_concat(
  case when `value` is not null 
  then `language` 
  else null end) languages,
concat(
  (sum(`value` is not null )/ count(distinct `language`) ) * 100,
  '%') translated
from table1
group by `key`

DEMO

【讨论】:

  • 谢谢你的回答,这就是我要找的
【解决方案2】:

Group_concat 值并加入自身计算字段:

SELECT key,languages,translated_values/COUNT(key) translated
FROM table b 
INNER JOIN 
(SELECT key, GROUP_CONCAT( languages SEPARATOR ',') languages, 
COUNT(*) as translated_values 
FROM table 
WHERE translated!=""
GROUP BY key) a ON a.key=b.key
GROUP BY key,translated_values,b.languages;

【讨论】:

    最近更新 更多