我有一个名为users的表,其中包含用户的详细信息,例如user_id,language。我目前正在选择我需要使用的字段,如下所示:
SELECT u.user_id, u.language
FROM users u
WHERE u.year=2016
这为我提供了user_id和语言的结果。有没有办法让子查询计算每种语言的数量,并有一个列与该语言的数量,并有另一列与百分比相比所有语言。我在下面做了一个小模型,看看我希望数据看起来如何
这是我尝试和工作的内容,但我不得不把语言放在那里应该是动态的:
SELECT u.user_id, u.language,
((SELECT count(*) FROM users u WHERE language='English') / (SELECT count(*)
FROM users u)) *100 AS percentage
FROM users u
答案 0 :(得分:1)
您可以使用包含所需信息的派生表,即每种语言的计数,并将表格加入其中:
SELECT u.user_id, u.language,
c.cnt_per_language as count,
(c.cnt_per_language / t.total) * 100 AS percentage
FROM users u
INNER JOIN (
SELECT count(*) AS cnt_per_language, language
FROM users
GROUP BY language
) AS c ON u.language = c.language
CROSS JOIN (SELECT count(*) AS total FROM users) AS t
派生表使用GROUP BY
子句来获取每种语言的计数。这是此查询与您获得所需结果的努力之间的关键区别。
注意:有关记录总数的信息只是一个标量值,因此我们可以使用CROSS JOIN
来获取它。