我有这个非常基本的问题而且无法弄清楚如何去做。我有两张桌子。
第一个users
包含两列:id
,它只是代表一个人的数字和sex
。第二栏现在没关系。
另一个表格orders
包含以下列:id_user
,time
,state
。 id_user
在第一个表中引用id
。 state
有三个不同的值(已完成,已取消,已取消)。我需要制作一个表格,显示该人的id
旁边的完成状态计数(一个人有多少完成状态)。我可以运行这件事:
select * , count(state) as CountOfFinished from orders
where state = 'finished'
group by id_user;
向我显示该信息,但我需要有一个显示id
,sex
,CountOfFinished
的表格。
我将第一个表格复制到新表格,但不知道如何在这两个表格旁边添加CountOfFinished
列。我甚至不知道如何制作一个列,所以我可以加入它或其他东西。
知道我该怎么办?
答案 0 :(得分:1)
您不需要新表。你想要的是JOIN
,或者在这种情况下是LEFT JOIN
:
SELECT
u.id,
u.sex,
ISNULL(COUNT(o.state), 0) as CountOfFinished
FROM users u
LEFT JOIN orders o
ON o.id_user = u.id
AND o.state = 'finished'
GROUP BY
u.id, u.sex
上述查询将列出所有users
和已完成orders
的数量。如果您只想列出至少有一个已完成users
的{{1}},请使用order
。
要插入新表格,请先创建表格并使用INNER JOIN
:
INSERT INTO