Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
使用两列作为键对两个表进行SQL查询_Sql_Join_Select_Group By_Count - Fatal编程技术网

使用两列作为键对两个表进行SQL查询

使用两列作为键对两个表进行SQL查询,sql,join,select,group-by,count,Sql,Join,Select,Group By,Count,我开始学习SQL(不是MySQL,因为它在某些方面似乎有所不同) 我遇到了一个我不知道如何解决的问题 我有以下表格: CREATE TABLE products( product char(30), color char(30) ); INSERT INTO products (product, color) VALUES ("table","brown"), ("chair","brown"), ("shelf","brown"), ("table","black"),

我开始学习SQL(不是MySQL,因为它在某些方面似乎有所不同) 我遇到了一个我不知道如何解决的问题

我有以下表格:

CREATE TABLE products(
    product char(30),
    color   char(30)
);

INSERT INTO products (product, color)
VALUES 
("table","brown"),
("chair","brown"),
("shelf","brown"),
("table","black"),
("chair","white");

CREATE TABLE suppliers(
    supplier char(30),
    product char(30),
    color   char(30)
);

INSERT INTO suppliers (supplier, product, color)
VALUES 
("s1","chair","brown"),
("s1","door","brown"),
("s1","table","brown"),
("s1","table","black"),
("s1","shelf","brown"),
("s2","chair","brown"),
("s3","table","brown"),
("s3","table","black"),
("s3","chair","brown"),
("s3","chair","white"),
("s3","shelf","white");
我需要使用SQL查找供应商和他们可以提供给商店的棕色产品的数量,商店销售这些产品,,按计数递增(产品表中的棕色产品)排序。 我从子查询和类似的内容开始:

select supplier,COUNT(pb.product)
from (select product from products where color = "brown") as pb, (select supplier, product from suppliers where color = "brown") as sb
where pb.product == sb.product;
但我想不出来,请帮忙

这些表格上的结果需要是:

supplier| no_of_products
-------------------------
   s2   |   1
   s3   |   2
   s1   |   3

看起来您需要简单的聚合:

select supplier, count(*) no_brown_products
from suppliers 
where color = 'brown'
group by supplier

这里有一个连接查询,希望它能解决您的问题

选择供应商,计数(pb.产品)
来自产品pb
sp上的内部连接供应商sp.color=pb.color
其中color='brown'
按供应商分组;

最后,我需要以下几点:

select supplier, COUNT(s.product)
From suppliers s, products p
WHERE s.product = p.product and s.color = "brown" and p.color = "brown"
GROUP by supplier
order by COUNT(s.product);

这个查询的执行顺序是什么?@Darknifem:我不知道你所说的执行顺序是什么意思……我只是意识到我不够具体,商店必须销售这些产品,而且订单必须在计算中,我很抱歉sorry@Darknifem:请编辑您的问题以显示您想要的结果,作为表格文本。我更新了表格数据+添加了一个结果,应该是,谢谢当我尝试执行此查询时,我得到了模棱两可的列名:color,谢谢你的帮助,我认为@GMB创造了奇迹happen@Darknifem最好的方法是不要使用Varchar来比较列,它是用所有颜色创建一个表颜色,当您得到一个意想不到的结果时,将它们与表产品和供应商上的外键链接起来。不要试图为你的总体目标编写代码。找出你的误解是什么。--分离出第一个错误的子表达式及其输入和输出。(调试基础。)不要只是转储错误的代码。尽可能少地剪切、粘贴和运行显示为OK的代码,并通过显示为NotOK的代码进行扩展。(调试基础。)解释您对给定代码的期望以及原因。感谢您的解释
选择供应商,将(s.product)计算为产品编号