计算相同和不同的值

Count same AND different values

在餐厅,一群朋友(每个人都有自己的user_id)吃了两件或更多东西(每个人都有自己的item_id)。

数据库中保存了谁(user_id)吃了什么(item_id)。

我怎样才能只找到谁 (user_id) 吃了不同的东西 (item_id)? 换句话说,我想从结果中排除那些吃了两次同样的东西的人。

下面的查询显示谁吃过不止一种东西,但不排除那些吃过两次同样东西的人(我不在乎):

SELECT
    `user_id`, DATE(date), `item_id`, COUNT(*)
FROM `restaurant`
GROUP BY
    `user_id`, DATE(date)
HAVING 
    COUNT(*) > 1

谢谢

COUNT(*) 计算每组 user_idDATE(date) 的每一行。

如果你想让它只计算不同的 item_ids 你需要关键字 DISTINCT:

SELECT user_id, DATE(date), 
       COUNT(DISTINCT item_id)
FROM restaurant
GROUP BY user_id, DATE(date)
HAVING COUNT(DISTINCT item_id) > 1;

请注意 item_idSELECT 列表中没有意义。