用MySQL计算百分比

时间:2017-01-10 15:37:41

标签: mysql

我有以下表结构

语言:

id  |  language
1   |  English
2   |  Dutch

文:

id | translation_id | translation | language_id
1  |                | Username    | 1
2  |                | Password    | 1
3  | 2              | Wachtwoord  | 2

我尝试了以下查询来获取每种语言的概述:

SELECT
  `languages`.`id`,
  `language`
  concat( round( ( COUNT(`translations`.`languages_id` = 1) / COUNT(`translations`.`languages_id` = 2)) * 100, 0), '%') AS `percentage`
FROM `languages`
JOIN `translations`
ON  `languages`.`id` = `translations`.`languages_id`

但出于某种原因,我只获得100%的百分比。虽然我希望荷兰人获得50%的奖金。

我现在得到的结果只是

[id] => 1 [language] => English [percentage] => 100% 

虽然我希望得到:

[id] => 1 [language] => English [percentage] => 100%
[id] => 2 [language] => Dutch [percentage] => 50%

我知道我的英语没有翻译链接。

在这种情况下,英语是默认语言,因此100%的其他语言都是英语的一定比例。这就是为什么我认为荷兰人为50%。

如果不对每种语言执行相同的查询,也无法获得每种语言的百分比吗?就像只选择ID和语言一样,您将返回2, Dutch1, English行。

1 个答案:

答案 0 :(得分:1)

您可以找到每种语言的行数,并将其除以英语计数,如下所示:

试试这个:

select l.*, concat(round(100 * count(t.languages_id) / t2.cnt,0),'%')
from languages l
left join translations t
on l.id = t.languages_id
cross join (
    select count(*) cnt
    from translations
    where languages_id = 1
) t2
group by l.id;