挑战你的SQL高手看过来。

Kaile 2004-11-11 02:31:51
(本来不该发到这里,但是好象mysql那边人气不足。)

一个表只有2个字段,一个是ID,一个是clicks,表示ID对应的点击数,现在想用一条语句得出有多少ID的点击数之和占整个点击数的50%,这条语句怎么写?
请高手看过来。
多条也可以,越简捷越好。
...全文
286 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kaile 2004-11-17
  • 打赏
  • 举报
回复
后面的一句要得到前面的@n啊。
Kaile 2004-11-15
  • 打赏
  • 举报
回复
如何用迭代?能不能给个例子?谢谢。
itian 2004-11-15
  • 打赏
  • 举报
回复
引用
回复人: xuzuning(唠叨) ( ) 信誉:609 2004-11-11 16:25:36 得分: 0

不会吧?
测试时不要忘了这一句
全部点击数
select @n:=sum(clicks) from tbl_name;

没有了@n,当然得不到结果了


不明白怎么把这句和后来的那句写到一起执行。这不是两个查询语句吗?
Kaile 2004-11-12
  • 打赏
  • 举报
回复
sorry,65万多条在我看来算大的了,因此还是希望用SQL解决。
ImN1 2004-11-12
  • 打赏
  • 举报
回复
这样看来你的50%是个模糊概念,并不是精准==50%
数据量不大的话(估计也不大),全部load出来用php数组函数来算方便很多
而且可以扩展60%、70%……
Kaile 2004-11-12
  • 打赏
  • 举报
回复
谢谢你的回复:

1.你需要count clicks刚好等于50%还是不少于50%?
当然是正好等于50%,一般的,正好相等的可能性很小,就取最接近50%的count数。

2.你要任意ID还是clicks最多的ID,因为不说清楚的,必然有m个ID为50%,而其他ID总和也是50%
当然是从clicks最多的ID开始计算,因为当然优先考虑最popular的product,这样才有意义


3.基于上述第二点,如果不是clicks最大的ID的话,m的组合可能性很多……
同2。
ImN1 2004-11-12
  • 打赏
  • 举报
回复
有些逻辑概念没搞清楚
1.你需要count clicks刚好等于50%还是不少于50%?
2.你要任意ID还是clicks最多的ID,因为不说清楚的,必然有m个ID为50%,而其他ID总和也是50%
3.基于上述第二点,如果不是clicks最大的ID的话,m的组合可能性很多……

所以你应该先给出些逻辑条件,例如“ID数目最少,& count clicks >= 50% total clicks”
arcow 2004-11-12
  • 打赏
  • 举报
回复
up
Kaile 2004-11-12
  • 打赏
  • 举报
回复
看来3.23不支持这个语句,那怎么办了?我现在用逐次逼近法,还有60%,70%,等等,这样做是要死人的。
xuzuning 2004-11-12
  • 打赏
  • 举报
回复
声明一下,我给的sql串在mysql4.0.1下通过,更高版本应该没有问题
是否能在底版本下运行需要测试一下
Kaile 2004-11-12
  • 打赏
  • 举报
回复
老大看过来:有什么问题吗?

table w_tmp_01 structure:
Product_ int(11)
Imp bigint(21)

test code:

$sql = ' select @n:=sum(Imp) from w_tmp_01 ';
$where = " ";
$group = " ;";
$sql = $sql . $where . $group;
$result = mysql_query($sql);
if(!$result)
{
echo "query err." . $sql ;
return 0;
}
$sql = ' select count(Product_), @m:=sum(Imp) from w_tmp_01 where Imp / @n = 0.5 ';
$where = " ";
$group = " ;";
$sql = $sql . $where . $group;
$result = mysql_query($sql);
if(!$result)
{
echo "query err." . $sql ;
return 0;
}
while($row = mysql_fetch_array($result))
{
echo "Product's count:" . $row[0] . " Imp's count:" . $row[1] . "<br>";
}
ImN1 2004-11-12
  • 打赏
  • 举报
回复
这样的话,我看你只能用迭代
GerryYang 2004-11-11
  • 打赏
  • 举报
回复
可惜,我只会oracle
死胖子 2004-11-11
  • 打赏
  • 举报
回复
学一招
xuzuning 2004-11-11
  • 打赏
  • 举报
回复
不会吧?
测试时不要忘了这一句
全部点击数
select @n:=sum(clicks) from tbl_name;

没有了@n,当然得不到结果了
Kaile 2004-11-11
  • 打赏
  • 举报
回复
mysql 3.23是不是不支持唠叨的语句,运行发现
count(id) = 0, @m is null
aboutagirl 2004-11-11
  • 打赏
  • 举报
回复
学习~
fzjw 2004-11-11
  • 打赏
  • 举报
回复
唠叨老大强,这个问题还真不知道,收藏。

很少关注Mysql,仅仅是用用,没深入学习,呵呵
xuzuning 2004-11-11
  • 打赏
  • 举报
回复
有多少ID的点击数之和占整个点击数的50%
select count(id),@m:=sum(clicks) from tbl_name where @m<@n/2
stan23 2004-11-11
  • 打赏
  • 举报
回复
综合以上各人的看法,就是我的观点 :D
加载更多回复(5)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧