当前位置: 首页 > 面试题库 >

我如何获得一个组的mysql总行数的百分比?

计寒
2023-03-14
问题内容

下面我有一个查询,将从用户代理表和IP地址链接表中获取网站的最常见用户代理:

SELECT count(*) as num, string FROM `useragent_ip`
left join useragents on useragent_id = useragents.id
group by useragent_id
having num > 2
order by num desc, string

有时它会告诉我一些类似的东西

25 Firefox
22 IE
11 Chrome
3  Safari
1  Spider 1
1  Spider 2
1  Spider 3

我的问题是,是否有一种方法可以使既然左侧的数字代表一个整体的百分比,并且会随着时间而增长,那么我能否使用sql语句的一部分来显示每个组在整体中的百分比?这样一来,having num > 2我可以不使用而做一些事情,说获得总行数的百分比,而不仅仅是行数?


问题答案:

是的你可以:

select num, string, 100 * num / total as percent
from (
    select count(*) as num, string
    from useragent_ip
    left join useragents on useragent_id = useragents.id
    group by useragent_id) x
cross join (
    select count(*) as total
    from useragent_ip
    left join useragents on useragent_id = useragents.id) y
order by num desc, string;

我删除了having num > 2,因为它似乎没有意义。



 类似资料:
  • 我正在使用这个数据帧: 我想通过<code>Name</code>和<code>Fruit</code〕来聚合,以获得每个<code>名称</code>的<code>Fruit<-code>总数。例如: 我尝试按和分组,但如何获取的总数?

  • 在各种情况下,我多次面对这个问题。它对所有编程语言都是通用的,尽管我对C或Java很满意。 我希望避免一个数组在另一个数组中重复迭代,这将增加执行时间(长度A乘以长度B),这在巨大数组的情况下是太多了。 我们有没有办法在每一个数组中做一次传递来获得公共元素?

  • Java中的两个一维数组/向量可以这样相加: Java中的两个二维数组/矩阵可以这样添加: 这两个函数都要求数组具有相同的大小,以避免。 应该有一种方法可以使用递归添加两个未知维度的数组。 例如,下面的代码使用假设函数 应该输出 现在我想知道如何实现这个函数。 我从以下伪代码开始: 可以使用java.lang.reflect.Array中的-方法创建新数组 可以这样进行循环: 但我遇到了很多运行时

  • 问题内容: 我有以下查询,其结果对我来说是非常意外的: 它为所有行返回100。应该不同吗? 问题答案: 等于您的情况。 尝试这样的事情: update :甚至用ratio_to_report更简单

  • 问题内容: 假设我有一个非标准化的表格,其中包含电影演员姓名和他们所去过的电影。 我要做的是找出演员去过多少部电影。但是我也想找出演员去过多少部电影。 我想我可以这样做: 但这似乎… idk …令人讨厌。 有任何想法吗? 问题答案: 对于大型集合,JOIN的性能可能优于子查询。 对于大型集合,当返回很大比例的行时,JOIN操作通常可以胜过子查询。在您的情况下,它不是相关子查询,因此MySQL不必多

  • 问题内容: 我有这个查询: 它给了我每一行的计数。现在,我想添加第三列,这将给我带来帮助。 我怎样才能做到这一点? 问题答案: 您可以使用子查询来做到这一点: 或带有变量: 在两个示例中,我都将count(*)转换为实数,以避免整数除法类型问题。 希望这对约翰有帮助