MySQL子查询计算选择字段的平均值

时间:2017-11-21 15:30:15

标签: mysql

我有一个名为users的表,其中包含用户的详细信息,例如user_id,language。我目前正在选择我需要使用的字段,如下所示:

SELECT u.user_id, u.language 
FROM users u 
WHERE u.year=2016

这为我提供了user_id和语言的结果。有没有办法让子查询计算每种语言的数量,并有一个列与该语言的数量,并有另一列与百分比相比所有语言。我在下面做了一个小模型,看看我希望数据看起来如何

enter image description here

这是我尝试和工作的内容,但我不得不把语言放在那里应该是动态的:

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

1 个答案:

答案 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来获取它。