计算具有特定值的行数

时间:2016-02-26 02:39:36

标签: mysql sql

我在名为ratings的表格中存储商品的评分。

value是0到7之间的整数(评级值)。

例如,让我们说showcase_id = 1总共有10个评分:

  • 5个评分是价值= 7
  • 2个评分为值= 6
  • 2个评分是值= 5
  • 1评级为值= 4
  • 没有评级值0,1,2,3

我是否有任何有效的方法可以从1个查询中选择每个特定值的评分总数,评分总数和平均评分?

e.g。行数/计数WHERE value = 6是2.我是否需要执行7个单独的子查询?

SELECT AVG(value),COUNT(*),????
FROM ratings
WHERE showcase_id = :showcase_id

3 个答案:

答案 0 :(得分:0)

您指的是count(distinct)吗?

SELECT AVG(value), COUNT(*), COUNT(DISTINCT value)
FROM ratings
WHERE showcase_id = :showcase_id;

编辑:

如果你想要每个值的总和,你可以使用子查询将它填入一列:

SELECT SUM(cnt * value) / SUM(cnt) as average,
       SUM(cnt) as total_cnt,
       GROUP_CONCAT(value, '-', cnt ORDER BY VALUE) as values
FROM (SELECT value, COUNT(*) as cnt
      FROM ratings r
      WHERE showcase_id = :showcase_id
      GROUP BY value
     ) r;

也许子查询也符合您的需求。

答案 1 :(得分:0)

分组出了什么问题?

#include <sys/ptrace.h>
...
ptrace(PTRACE_ATTACH, pid, NULL, NULL); // or PTRACE_SEIZE if you don't want to suspend the process
int data = 4;
ptrace(PTRACE_POKEDATA, pid, 0x83040, &data);

编辑(使用整体平均值和手提箱):

SELECT AVG(value),COUNT(*), value
FROM ratings
WHERE showcase_id = :showcase_id
GROUP BY value;

答案 2 :(得分:0)

您可以使用WITH ROLLUP修饰符GROUP BY来获取每个值的计数和平均值,以及所有内容的总计(如果按多列分组,它还会为每个值创建小计内部团体)。

SELECT value, AVG(value) AS avg, COUNT(*) as count
FROM ratings
WHERE showcase_id = 1
GROUP BY value WITH ROLLUP

这将为每个值及其计数生成一行,然后使用value = NULL的行聚合整个结果。

DEMO