在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。啊,太好了,谢谢你修复了我的死脑: