【问题标题】:mysql count() row entries per column above 0mysql count() 每列的行条目大于 0
【发布时间】:2012-05-05 01:47:32
【问题描述】:

我正在尝试运行总评分查询,其中一部分需要 $sel = mysql_query("SELECT SUM(col1, col2, col3, col4, col5, col6, col7, col8)/XXXX as total FROM rating WHERE shop_id = $shop_id");

XXXX 在哪里,我需要计算每列高于 0 的行条目数,然后将 TOTAL 除以 # 以获得总评分。

数学是: 总/大于 0 的值的个数

谢谢

我正在尝试计算 0 以上的条目数,这意味着 shop_id 为 1 的条目总数为 35。 35 除以 0 以上的条目数,即 5 得到总结果,不将 0 行/列作为投票。

这是我想要的与表中数据相关的输出。 shop_id 1 -> 35/7 = 5 shop_id 2 -> 42/ = 3 shop_id 3 -> 40/8 = 5

【问题讨论】:

  • 非常模棱两可。示例数据和所需的输出可能会有所帮助。

标签: mysql


【解决方案1】:
SELECT 
SUM(col1, col2, col3, col4, col5, col6, col7, col8)/
SUM(IF(col1 > 0, 1, 0), IF(col2 > 0, 1, 0), ... ) AS total 
FROM ratings 
WHERE shop_id = $shop_id")

... 替换为您正在测试的每一列的相同逻辑。由于您有条件地输出零或一,因此总和基本上与计数具有相同的目的。

不要引用我的语法 - 但这应该为您指明正确的方向。

【讨论】:

  • 试过了,但一直报错,“arning: mysql_num_rows() 期望参数 1 是资源,给定的布尔值”我的代码中没有显示语法错误来指示语法问题。
  • 如果您可以在 PHP 脚本之外运行 SQL,可能是最好的,可能是命令行或 PHPMyAdmin。
  • 刚刚在 hiediSQL 中运行了我的查询:SELECT SUM(舒适 + 服务 + 氛围 + 友好 + 宽敞 + 体验 + bud_quality + bud_price + drink_price + space_cake + 无障碍 + 厕所访问)/24 作为总评分 WHERE shop_id = 1 是我使用的确切代码,24 是大于 0 的字段值的数量。它分为 2 行(具有匹配的 shop_id)和 12 列,构成总票数。我需要根据选票更改数字 24。摆弄 count() 但很迷茫,谢谢
  • 你能解释一下你给我的代码到底在做什么吗?我想我知道我现在需要发生什么,只是无法实现
  • 每个 IF(col1 > 0, 1, 0) 都说“如果列的值大于零,则提供值 1,否则提供值为零”。一旦你对每一列进行了检查,你会得到一系列的零和你将加在一起的零。例如,SUM(1,1,1,0,1,0,0,1) 基本上将为您提供每行值大于零的列数。
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2016-01-16
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多