我在名为ratings
的表格中存储商品的评分。
value
是0到7之间的整数(评级值)。
例如,让我们说showcase_id = 1
总共有10个评分:
我是否有任何有效的方法可以从1个查询中选择每个特定值的评分总数,评分总数和平均评分?
e.g。行数/计数WHERE value = 6
是2.我是否需要执行7个单独的子查询?
SELECT AVG(value),COUNT(*),????
FROM ratings
WHERE showcase_id = :showcase_id
答案 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
的行聚合整个结果。