我目前有两张桌子:
喜爱: 用户身份 drinkName
史: 用户身份 drinkName
我想得到每个表中特定用户ID显示的总时间总和,然后是两个表中userID显示的总次数。
(SELECT COUNT(userID) AS totalDrinks FROM History
WHERE userID = 'sai') union
(SELECT COUNT(userID) AS totalDrinks FROM Favorite
WHERE userID = 'sai')
这样代码就会得到以下输出:
totalDrinks
4
2
但是我正在尝试使用MySQL sum函数,而不是添加两个东西。 所以我想知道如何将我的查询重写为输出6?
答案 0 :(得分:1)
SELECT SUM(userID)as totalDrinks FROM History h
JOIN Favorite f ON h.userID=f.userID
GROUP BY userID
WHERE userID = 'sai'
答案 1 :(得分:0)
您的UNION
方法几乎就在那里。您必须SUM
两个查询的结果:
SELECT SUM(totalDrings) totalDrings FROM (
SELECT COUNT(*) totalDrinks FROM History
WHERE userID = 'sai'
UNION ALL
SELECT COUNT(*) FROM Favorite
WHERE userID = 'sai'
) s
有几点需要注意。您应该使用UNION ALL
,否则如果COUNT
s的结果相同,那么它们只会被添加一次。另一件事是你不应该在这里使用INNER JOIN
,因为这将迫使用户出现在两个表中。