【问题标题】:SQL Query to count a grouped joined table by null in a columnSQL 查询以按列中的空值计算分组连接表
【发布时间】:2012-11-30 04:51:05
【问题描述】:

我有 3 张桌子 productsstockpurchases

Puchasesprimary keypurchaseID

我的products 表有一个primary keyproductID,然后是包含产品详细信息的列。

我的stock 表有一个primary keyframenumber 一个foreign keyproductID 和另一个foriegn keypurchaseID

并非所有产品都有库存。

我想joinprodcutsproductID 旁边的股票表,并在末尾有一行计算purchaseID 列中的空值数量,这表示我有多少有货。

我已经尝试了queries 的负载,但似乎总是只在stock 表中找到条目总数,或者subqueries 没有正确加入。

我尝试过的一些事情

SELECT * , COUNT( * ) AS Count
FROM Products
LEFT JOIN Stock ON Products.productID = Stock.productID
WHERE Stock.OrderID IS NULL AND Stock.framenumber IS NOT NULL
GROUP BY Products.productID

只给我按productID分组的库存中所有对象的数量,而不是加入所有产品

架构

CREATE TABLE BikeStock (

FrameNumber VARCHAR(10) PRIMARY KEY,
BikeCode VARCHAR(40),
OrderID INT,
FOREIGN KEY (BikeCode) REFERENCES Bike(BikeCode),
FOREIGN KEY (OrderID) REFERENCES Purchase(OrderID)
);

CREATE TABLE Bike (

BikeCode VARCHAR (40) PRIMARY KEY,
Manufacturer VARCHAR (30),
Model VARCHAR (30),
SubType VARCHAR (30),
Year SMALLINT,
FrameMaterial VARCHAR (20),
Description TEXT,
Gender VARCHAR (6),
Type VARCHAR (20),
Price DECIMAL (11,2)
);


CREATE TABLE Purchase (

DateOfPurchase DATETIME,
OrderID INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(OrderID),
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)

);

【问题讨论】:

  • 请发布几个失败的查询。
  • 不能发布带有示例数据的表架构

标签: php mysql sql database join


【解决方案1】:
SELECT Products.productID , SUM( 
case 
   when  (Stock.OrderID IS NULL AND Stock.framenumber IS NOT NULL) 
      then 1 
      else 0 
end case
) AS Count
FROM Products
LEFT JOIN Stock ON Products.productID = Stock.productID
GROUP BY Products.productID

【讨论】:

  • 我在 mysql 上使用我的实际架构运行它,但它不会运行 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 6 行 SELECT Bike.BikeCode ,SUM( case when (BikeStock .OrderID 为 NULL) 然后 1 else 0 end case ) AS Count FROM Bike LEFT JOIN BikeStock ON Bike.BikeCode = BikeStock.BikeCode GROUP BY Bike.BikeCode
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多