如何根据列值唯一构建计算结果的查询



我的查询下面有效,但来自同一成员的多个记录在numfield1中被计数。我将如何更改它,以便Numfield1仅计算每个成员每个位置的记录,但仍然像目前一样对其进行分组?在表中,成员位于名为MemberId的列中。

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

编辑:也许这会有所帮助,我想知道每个唯一的field1和定位的记录有多少记录,其中有一个数记录,它们的记录仅匹配一次。

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

预期的输出将为Apple的计数1,因为只有两个唯一的成员包含Apple,位置为1,而Apple的位置为3,因为位置2的位置为23,因为它以相同的成员,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;

您可以尝试'独特'?

SELECT *
,COUNT(DISTINCT field1) AS numField1
,AVG(price1)
FROM tableName
GROUP BY field1
    ,position
HAVING STATUS = '1'
ORDER BY numField1 DESC
    ,updated DESC

最新更新