gpt4 book ai didi

php - 使用 PHP/mySQL 从数组计算十分位数/五分位数

转载 作者:可可西里 更新时间:2023-11-01 08:45:21 25 4
gpt4 key购买 nike

我正在使用这样的查询获取数据:

SELECT `product_name`, `Number of Cases` FROM `myTable` where `color` = 'red' order by `Number of Cases` DESC";

如果我 var_dump 我会得到一个这样的数组:

array(2) { 
[0]=> array(4) { ["product_name"]=> string(5) "23418" [0]=> string(5) "23418" ["Number of Cases"]=> string(3) "434" [1]=> string(3) "434" }
[1]=> array(4) { ["product_name"]=> string(5) "79746" [0]=> string(5) "79746" ["Number of Cases"]=> string(3) "372" [1]=> string(3) "372" }
}

上面是一个例子,但是很明显,我在真实的表中有更多的行。

这就是我想要做的......

获取“案例数”的所有值并将它们分成五分位数(5 个桶,每个“桶”中的值数量相等)或十分位数(10 个桶,每个“桶”中的值数量相等) .我需要为每个五分位数或十分位数返回最高值(对于“案例数”)。

我看到流程是这样的:

  • 从“案例数”中排序值
  • 计算返回值(行)的数量
  • 分成相等的“桶”(例如,如果返回 100 行并且我需要十分位数 {10 个相等的桶},那么每个桶将有 10 行。
  • 获取/返回每个桶中最高值的值

我知道这些步骤,但我无法将它们转换成可用的 PHP。

任何见解都会有所帮助。

谢谢。

最佳答案

您可以使用变量将 tile 列添加到 MySQL 的数据中。以下是五分位数和十分位数的示例:

SELECT t.*,
floor((seqnum - 1) * 5 / @rn) as tile_5,
floor((seqnum - 1) * 10 / @rn) as tile_10
FROM (SELECT `product_name`, `Number of Cases`, (@rn := @rn + 1) as seqnum
FROM `myTable` CROSS JOIN
(SELECT @rn := 0) params
WHERE `color` = 'red'
ORDER BY `Number of Cases` DESC
) t

编辑:

上面的应该可行,但也许 @rn 发生了一些奇怪的事情。如果是这样:

SELECT t.*,
floor((seqnum - 1) * 5 / x.cnt) as tile_5,
floor((seqnum - 1) * 10 / x.cnt) as tile_10
FROM (SELECT `product_name`, `Number of Cases`, (@rn := @rn + 1) as seqnum
FROM `myTable` CROSS JOIN
(SELECT @rn := 0) params
WHERE `color` = 'red'
ORDER BY `Number of Cases` DESC
) t CROSS JOIN
(SELECT COUNT(*) as cnt FROM myTable WHERE color = 'red') x;

关于php - 使用 PHP/mySQL 从数组计算十分位数/五分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com