我有以下表结构
语言:
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, Dutch
和1, English
行。
答案 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;