我对MySQL查询相当新,尤其是更复杂的查询。 我有两个表要加入(x和y)。表x包含Name,ID和TotalNum,其中y包含ID和Online。所以它看起来像这样:
Name | Store| TotalNum
Blah | 1 | 3
Blah1 | 2 | 2 Etc..
Store| Lane | Online
1 | 1 | 1
1 | 2 | 1
1 | 3 | 0
2 | 1 | 1
2 | 2 | 0
Etc..
我正在尝试将我的表连接在一起并返回Online = 1的计数 所以,我追求的结果是:
Name | TotalNum | Online
Blah | 3 | 2
Blah1 | 2 | 1
Etc..
到目前为止,我有以下查询:
SELECT s.Name, s.TotalNum, COUNT(r.Online = 1) AS Online FROM TableX AS r
LEFT JOIN TableY AS s ON s.Store = r.Store
WHERE r.Store = 'xx'
但它只返回总行数,无论Online = 1还是0。 任何帮助赞赏。感谢
答案 0 :(得分:1)
这应该这样做:
SELECT x.Name, x.TotalNum, SUM(y.Online = 1) Online FROM TableX x
LEFT JOIN TableY y ON x.Store = y.Store
WHERE x.Store = 'xx'
如果0
如果TableY
中没有匹配元素,您还需要COALESCE
,那么您应该COALESCE(SUM(y.Online = 1))
结果:ID
。
此外,name
并不清楚您的意思,因为我在查询和表格中都没有看到任何内容。但是,此查询的工作原理是,对于单个TotalNum
,您只能有一个Store
和{{1}}个。{/ p>
答案 1 :(得分:1)
这只是总结online
!
SELECT
s.Name,
s.TotalNum,
sum(r.Online) AS Online
FROM TableX AS r
LEFT JOIN TableY AS s ON s.Store = r.Store
WHERE r.Store = 'xx'
答案 2 :(得分:1)
这种使用计数的方法对我也有用:
SELECT tablex.name, tablex.storeID, tablex.totalNum, count(online) FROM tablex
INNER JOIN tabley
ON tablex.storeID = tabley.storeID
WHERE online = 1
GROUP BY name
我的结果
name storeID totalNum count(online)
blaA 1 3 2
blaB 2 2 1