【问题标题】:MySQL Count cols with multiple group byMySQL Count 具有多个分组依据的列
【发布时间】:2019-09-07 14:28:24
【问题描述】:

我有一个带有翻译的数据库表。有 ID、word、translation、source_language、target_language 列。我想知道每个单词有多少翻译成另一种语言。

我使用了这个查询:

SELECT word, count(translation) as number, source_language, target_language
FROM word_translations 
WHERE source_language = 'deu'
GROUP BY  word, target_language

结果对我来说似乎很奇怪,但是,当我查看每种语言可用的翻译总数时,这毫无意义。一个词可以有不同数量的翻译成多种语言,所以我想我不能按词组。

样本数据:

  • 汽车 - 自动 - eng - deu
  • 汽车 - pkw - eng - deu
  • 汽车 - voiture - eng - fra
  • car - vagon - eng - fra
  • 汽车-汽车-英语-fra
  • 汽车 - coche - eng - spa

预期结果:

  • 汽车 - deu - 2
  • 汽车 - fra - 3
  • 汽车 - 水疗中心 - 1

【问题讨论】:

  • 您的代码看起来不错,但我不明白您的意思:结果对我来说似乎很奇怪
  • 对不起,我已经添加了示例数据和预期结果,希望有助于理解
  • @keschra 。 . .您的示例都有“eng”的源语言,但您的 coede 有“deu”。

标签: mysql sql group-by count


【解决方案1】:

我想知道每个单词有多少翻译成另一种语言。

如果您只想计算翻译,您可能需要:

SELECT word, count(*) as number_translations,
       count(distinct target_language) as num_languages
FROM word_translations 
WHERE source_language = 'deu'
GROUP BY word, source_language;

您的查询会计算每种目标语言的翻译数量。

【讨论】:

  • 按单词和目标语言计算翻译很重要。例如,“汽车”一词可以有 5 种德语、2 种法语和 10 种不同的俄语翻译。
【解决方案2】:

您的WHERE 子句是错误的。
应该是:WHERE source_language = 'eng'

SELECT word, count(translation) as number, source_language, target_language
FROM word_translations 
WHERE source_language = 'eng'
GROUP BY  word, target_language

请参阅demo
结果:

| word | source_language | target_language | number |
| ---- | --------------- | --------------- | ------ |
| car  | eng             | deu             | 2      |
| car  | eng             | fra             | 3      |
| car  | eng             | spa             | 1      |

如果您想计算所有源语言的每个单词有多少翻译,那么您还必须group by source_language 并删除WHERE 子句:

SELECT word, count(translation) as number, source_language, target_language
FROM word_translations 
GROUP BY word, source_language, target_language

【讨论】:

  • 这只是一个例子,我不想为多种语言计算它,抱歉。但看起来结果是正确的。我需要找出为什么它们与每种语言的翻译总数无关。
  • 如果你想为多种语言计算它,那么代码必须不同。这是你想要的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多