我怎样才能加入MySQL的计数?

时间:2013-07-09 04:42:20

标签: mysql sql join count

如果我有两个表,则一个是:

CAR

| ID |  MAKER |
---------------
|  1 |  Honda |
|  2 | Toyota |
|  3 |   Ford |
|  4 |  Honda |
|  5 |   Ford |
|  6 |  Honda |

其中id是汽车识别号码,而制造商是汽车的制造商

,另一个是

购买

| CUSTID | CARID |
------------------
|      1 |     1 |
|      1 |     4 |
|      1 |     6 |
|      2 |     1 |
|      2 |     2 |
|      2 |     4 |
|      2 |     6 |
|      3 |     2 |
|      4 |     5 |
|      4 |     2 |

其中custid是客户的ID,carid是特定车辆的ID

有没有办法将两者合二为一,然后找出哪些客户购买了所有Hondas

3 个答案:

答案 0 :(得分:1)

您需要将两个表与CarID一起加入,并将其与CustID分组,并且需要使用HAVING子句来获取1,4,6中CarID的所有记录。 3子句中的HAVING表示CarID的数量(即1,4和6)。

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE CarID IN (1,4,6)
 GROUP BY CustID
HAVING COUNT(CarID) = 3;

或者不使用ID直接使用名称:

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE Maker = 'Honda'
 GROUP BY CustID
HAVING COUNT(CarID) = 3;

获取计数(例如,在这种情况下为3)使用此查询

SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda';

所以整个查询可以是这样的:

SELECT P.CustID, COUNT(CarID)
  FROM Purchase P
  JOIN Car C
    ON P.Carid = C.ID
 WHERE Maker = 'Honda'
 GROUP BY CustID
HAVING COUNT(CarID) = (SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda');

输出:

╔════════╦══════════════╗
║ CUSTID ║ COUNT(CARID) ║
╠════════╬══════════════╣
║      1 ║            3 ║
║      2 ║            3 ║
╚════════╩══════════════╝

答案 1 :(得分:0)

尝试此查询:

select P.CustID
from purchase P
inner join CAR C on P.CarID=C.CarID
WHERE C.Maker like '%Honda%'
group by CustID
having count(P.CarID)=
    (select count(*) from CAR C where C.Maker like '%Honda%')

<强> SQL FIDDLE

答案 2 :(得分:0)

试试这个:

SELECT A.*, B.*, C.* FROM purchase AS A
INNER JOIN(customer AS B) ON(A.cust_id = B.cust_id)
INNER JOIN(car AS C) ON(A.car_id = C.car_id)
WHERE A.car_id = '1'

我假设您有customer表。请记住,您的purchase表格必须包含purchase_id等主要字段。并且WHERE A.car_id = '1'这是您的本田ID为1

的条款