我希望这对某人来说是一个简单的问题, 我试图获取属于某个regionID的用户数。
我有一个用户表和一个场地表,我希望匹配特定regionID的用户区域和场地区域。
例如
*=
我的各种尝试的结果导致数百万,1到非响应页面(gulp)
示例表数据:
用户
__imul__
场地
SELECT COUNT(*) FROM users
LEFT JOIN venues
ON users.region = venues.region
WHERE venues.regionID = '18'
感谢
答案 0 :(得分:1)
我猜(不知道)您希望计算与您的regionId标准匹配的不同用户。
你可以这样做。
SELECT COUNT(*)
FROM users
WHERE region IN (SELECT region FROM venues WHERE regionID = '18')
或者,您可以像这样获得每个区域中不同用户的数量。
SELECT COUNT(DISTINCT users.userID) users,
region.regionID
FROM users
JOIN venues ON users.region = venues.region
GROUP BY region.regionID
我猜您的userID
表格中有一个users
列。
COUNT(*)
可能无法在JOIN中工作,因为连接操作的结果可能包含与users
表本身不同的行数。
这是有助于了解大量SQL甚至指定所需结果的操作之一。幸运的是,DISTINCT
关键字有助于将大量计数减少到更小,更有意义的计数。
为了提高性能,您可能应该在users
列的(region, usersID)
表上添加复合索引。此DDL查询可能会为您执行此操作。
ALTER TABLE users ADD INDEX region_userID (region, usersID)
另外,在另一张桌子上,试试这两个
ALTER TABLE venues ADD INDEX regionID_region (regionID, region)
ALTER TABLE venues ADD INDEX region_regionID (region, regionID)