我有两张表具有以下结构 表A
itemId categoryId orderDate
==========================================
1 23 2016-11-08
1 23 2016-11-12
1 23 2016-11-16
表B 具有结构
categoryId stock price
==========================================
23 500 600
然而我想要的输出应该是这样的 结果C
price stock orderdate qty
600 500 2016-11-08 (first order date) 3 (3 time appearance in first table)
这是我到目前为止所尝试的内容
select b.price,b.stock from B b, A a
where b.categoryId = (
select a.categoryId
from A
GROUP BY categoryId
HAVING COUNT(categoryId)>1
)
and (a.orderdate = (
select MIN(orderdate)
from A
where categoryId = b.categoryId)
)
我有以下结果
price stock orderdate
600 500 2016-11-08
我不知道如何找到qty
,因为它在第一张表中出现了3次。
答案 0 :(得分:1)
我认为您希望表中的记录按项ID和类别ID分组,因此请在group by语句中包含这两个记录。然后你必须使用MIN,MAX,AVG,SUM等聚合其他列。我使用MIN,它将为你提供该特定列组中最小的数字,尽管在这种情况下你是否使用MIN无关紧要或MAX或AVG - 它们都是一样的。然后COUNT(*)将只计算组中的recrod数量。
此外,联接通常比使用逗号的列表更受欢迎。
SELECT a.itemid, a.categoryid, MIN(b.price), MIN(b.stock), min(a.orderdate), count(*) as qty
FROM a
INNER JOIN b ON a.categoryid = b.categoryid
GROUP BY a.itemid, a.categoryid
答案 1 :(得分:0)
您还需要选择COUNT(*)
答案 2 :(得分:0)
如何使用以下sql
select min(price), min(stock), min(orderDate), COUNT(categoryId)
from A,B where A.categoryId = B.categoryId
GROUP by A.categoryId
答案 3 :(得分:0)
您可以为子查询创建视图,并为其提供有意义的名称,例如CategoriesUsedInMultipleOrders
,MostRecentOrderByCategory
。这将优化'通过抽象出复杂性并使人类读者更容易理解来进行查询。
答案 4 :(得分:0)
这是使用适当的连接方法see Result的查询:
SELECT B.price, B.stock, MIN( A.orderDate ) AS orderdate, COUNT( * ) AS qty
FROM TableA A, TableB B
WHERE A.categoryId = B.CategoryId
GROUP BY A.categoryId, B.price, B.stock