Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL查询中,仅对join中的不同元素进行计数_Mysql - Fatal编程技术网

在MySQL查询中,仅对join中的不同元素进行计数

在MySQL查询中,仅对join中的不同元素进行计数,mysql,Mysql,我的数据库中有这两个表: ╔════════════════╗ ║ beer ║ ╠════════════════╣ ║ id ║ ║ name ║ ║ ... ║ ╚════════════════╝ ╔════════════════╗ ║ checkin ║ ╠════════════════╣ ║ id ║ ║ beer_id ║ ║ user_i

我的数据库中有这两个表:

╔════════════════╗
║ beer           ║
╠════════════════╣
║ id             ║
║ name           ║
║ ...            ║
╚════════════════╝

╔════════════════╗
║ checkin        ║
╠════════════════╣
║ id             ║
║ beer_id        ║
║ user_id        ║
║ date           ║
║ ...            ║
╚════════════════╝
我做了一个简单的查询,返回啤酒被检入的次数:

SELECT COUNT(c.id) as TOTAL, b.*, c.*
FROM beer b
JOIN checkin c ON c.beer_id = b.id
GROUP BY c.beer_id
ORDER BY TOTAL DESC

修改它以使返回的总计数由唯一用户进行的最佳方式是什么?如果一个用户有多个相同啤酒的签入,则只应计数一次?

通过在beerId上分组来计数不同的用户

SELECT COUNT(distinct c.user_id) as TOTAL
FROM beer b
JOIN checkin c ON c.beer_id = b.id
GROUP BY c.beer_id
ORDER BY TOTAL DESC

使用适当的分组方式。所有非聚合列都必须在GROUP BY中。*不允许在“按组选择”中使用。您试图区分的用户列是什么?是c.id吗?我已经编辑了最初的问题,因为它可能不够清楚。我想总计数只从1个用户每啤酒计数签入。比如,如果一个用户有3次签入啤酒X,另一个用户有1次签入啤酒X,那么啤酒X的总数将是2而不是4。啊,太好了,谢谢你修复了我的死脑: