MySQL 计算多列中的不同值
MySQL count distinct values in multiple columns
我需要计算光顾每个餐厅位置的不同人数。同一人多次访问同一地点只计算一次。
输入:
location visitor
-------------------
sydney john
melbourne john
melbourne jane
melbourne pete
sydney paul
melbourne jane
sydney jake
sydney john
sydney john
melbourne jake
sydney john
预期输出:
location count
-----------------
sydney 3
melbourne 4
我已尝试按照此处的示例进行操作 Using group by on multiple columns,嵌套 SQL 查询像这样
select distinct location,count(*) as c from (select distinct location,distinct visitor from guests) group by location,visitor order by c desc
和无休止的谷歌搜索,但没有运气。
您需要按位置分组,但您的 DISTINCT 是按访问者分组的
select
location,
count( DISTINCT visitor) as c
from
guests
group by
location
order by
c desc
不过,考虑到你的SAMPLE数据不好。最好查找 tables,例如具有 ID 和位置的 Locations,以及具有 ID 和名称的 People table。那么您的访问 table 将有一个 Location_ID 和一个 Person_ID。
如果你有一个
无名氏
约翰·史密斯。
仅仅让 John 并不能真正区分并且会给出错误的答案。
我需要计算光顾每个餐厅位置的不同人数。同一人多次访问同一地点只计算一次。
输入:
location visitor
-------------------
sydney john
melbourne john
melbourne jane
melbourne pete
sydney paul
melbourne jane
sydney jake
sydney john
sydney john
melbourne jake
sydney john
预期输出:
location count
-----------------
sydney 3
melbourne 4
我已尝试按照此处的示例进行操作 Using group by on multiple columns,嵌套 SQL 查询像这样
select distinct location,count(*) as c from (select distinct location,distinct visitor from guests) group by location,visitor order by c desc
和无休止的谷歌搜索,但没有运气。
您需要按位置分组,但您的 DISTINCT 是按访问者分组的
select
location,
count( DISTINCT visitor) as c
from
guests
group by
location
order by
c desc
不过,考虑到你的SAMPLE数据不好。最好查找 tables,例如具有 ID 和位置的 Locations,以及具有 ID 和名称的 People table。那么您的访问 table 将有一个 Location_ID 和一个 Person_ID。
如果你有一个 无名氏 约翰·史密斯。
仅仅让 John 并不能真正区分并且会给出错误的答案。