mysql - 如何构建基于列值唯一的结果计数的查询?

标签 mysql sql

我有下面的查询,它工作正常,但来自同一成员的多条记录计入 numField1。我将如何更改它,以便 numField1 只计算每个成员每个位置的 1 条记录,但仍像目前一样对它们进行分组?在表中,成员位于名为 memberId 的列中。

SELECT *, COUNT(field1) AS numField1, AVG(price1) FROM tableName GROUP BY field1, position HAVING status = '1' ORDER BY numField1 DESC, 更新的 DESC

编辑:也许这会有所帮助,我想知道每个唯一的 field1 和 position 对有多少记录与同一个 memberId 匹配一次。

recordId | memberId | status | updated | field1 | position | price
==================================================================
    1         55        1         1      apple       1       1.00
    2         55        1         2      apple       1        .50
    3         65        1         3      apple       1        .75
    4         75        1         4      apple       2       2.00
    5         85        1         5      apple       2       3.00
    6         95        1         6      apple       2       4.00

对于位置为 1 的苹果,预期输出为计数 2,因为只有两个唯一的 memberId 包含苹果和位置为 1,对于位置为 2 的苹果,计数为 3,因为三个唯一的 memberId 包含位置为 2 的苹果。原始查询计数每个 3,因为它多次计算具有相同 memberId、field1 和位置的记录。相关预期结果如下,希望对您有所帮助。

field1 | position | numField1
==============================
apple        1       2
apple        2       3

最佳答案

您希望每个 field1 + position 有一个结果行,因此按它们分组。对于每个这样的组合,您需要计算不同的 memberID,因此计算不同的 memberID

select field1, position, count(distinct memberid)
from tablename
group by field1, position
order by field1, position;

关于mysql - 如何构建基于列值唯一的结果计数的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498883/

相关文章:

mysql - 配置 Django 以使用远程 mysql 服务器?

mysql - SQL只找到一个标签而不是两个

mysql - (MySQL) 当使用完整的 where 条件时,结果变为 0,但当我输入单个条件时,值结果出现为 true

php - 在下面的示例中将 mysql 转换为 mysqli

mysql - SQL - 加入 MAX(created_at)

java - 这个数据库更新命令的计算是否正确?

sql - 将 INSERT...RETURNING 的返回值保存到临时表 (PostgreSQL)

mysql - 使用 Last_insert_id() 时出现语法错误

mysql - 从子集查询

mysql - sql中两个表的列求和