Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何加入MySQL中的计数?_Mysql_Sql_Join_Count - Fatal编程技术网

我如何加入MySQL中的计数?

我如何加入MySQL中的计数?,mysql,sql,join,count,Mysql,Sql,Join,Count,如果我有两张桌子,其中一张是: 汽车 其中id是汽车id号,制造商是汽车制造商 另一个是 购买 | CUSTID | CARID | ------------------ | 1 | 1 | | 1 | 4 | | 1 | 6 | | 2 | 1 | | 2 | 2 | | 2 | 4 | | 2 | 6 | | 3 | 2 | | 4 |

如果我有两张桌子,其中一张是:

汽车

其中id是汽车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

尝试以下查询:

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%')

您需要使用
CarID
连接两个表,使用
CustID
将其分组,并需要使用
HAVING
子句来获取CarID位于1,4,6中的所有记录。此处
HAVING
子句中的
3
表示龋齿的数量(即1、4和6)

或者直接使用名称代替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';
因此,整个查询可以如下所示: 输出:

╔════════╦══════════════╗
║ CUSTID ║ COUNT(CARID) ║
╠════════╬══════════════╣
║      1 ║            3 ║
║      2 ║            3 ║
╚════════╩══════════════╝
  • 查看更多值
试试这个:

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\u id
这样的主字段。而
其中A.car\u id='1'
这是一个条款,您的本田id是
1

这只是一个假设列表,如果这不是一个完整的列表呢?@Luv-
LIKE
在我们有特定名称时不应使用(例如,在本例中为本田)。当我们有
Maker
name@hims056时,这不会给你带来预期的结果,但是
HeroHonda
不是
汽车制造商
@Luv-不要去现实世界,我只是给你举个例子。
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 ║
╚════════╩══════════════╝
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'