MYSQL - 从2个表中获取行数

时间:2017-02-21 20:20:27

标签: mysql count

我希望这对某人来说是一个简单的问题, 我试图获取属于某个regionID的用户数。

我有一个用户表和一个场地表,我希望匹配特定regionID的用户区域和场地区域。

例如

*=

我的各种尝试的结果导致数百万,1到非响应页面(gulp)

示例表数据:

用户

__imul__

场地

SELECT COUNT(*) FROM users 
LEFT JOIN venues 
ON users.region = venues.region 
WHERE  venues.regionID = '18' 

感谢

1 个答案:

答案 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)

阅读本文:http://use-the-index-luke/