希望有人能帮忙。MySQL JOIN的陈述从来都不是我的强项,它们只是伤害了我的大脑,试图弄清楚它们。
我有一个表,它将一个项目的评级存储在另一个表中,由ID跟踪。
不过,我现在需要做的是显示一个由收视率排序的项目列表,从高到低,从低到高。
我可以很容易地从评级表中按ID获得每个项目的评等列表,但是它会让它JOINed到我被困在上面的项目。并不是所有的项目都有评级(目前为止),因此,如果合并列表不只是停留在现有评级的末尾,也将是有益的。
好的,下面是我的分组声明:
SELECT `themeID` , SUM( `rating` ) AS ratings
FROM `votes`
GROUP BY `themeID`
ORDER BY `ratings` DESC 输出
themeID ratings
1 6
3 3
2 2
6 2然后,details表由各种信息组成,如id、filename、name、date等。
在这两个表之间,themeID和id链接它们是相同的。我看过类似查询的其他一些答案,但我无法得到任何答案来处理我的表/查询(可能是因为我没有完全掌握JOIN的答案)。
ANy的帮助将拯救我的严重头痛!
发布于 2015-09-26 11:56:57
只需加入两个表并添加聚合函数即可。
SELECT d.id, d.filename, d.name, IFNULL(SUM(v.rating), 0) AS ratings
FROM details AS d
LEFT JOIN votes AS v ON d.id = v.themeID
GROUP BY d.id我使用了LEFT JOIN,所以这将显示细节,即使没有投票。
发布于 2015-09-26 12:10:35
我在sql server中进行了测试,您可以在Mysql中获得相同的测试。
DROP TABLE #Item
create table #Item (ID int identity(1,1),ItemNAme varchar(10))
INSERT INTO #Item(ItemNAme)
SELECT 'A'
UNION ALL
SELECT 'B'
UNION ALL
SELECT 'C'
DROP TABLE #ItemRating
create table #ItemRating (ItemID int ,rating int)
INSERT INTO #ItemRating(ItemID,rating)
SELECT 3,2
UNION ALL
SELECT 2,11
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 2, 4
union all
SELECT 1,5
UNION ALL
SELECT 3,12
UNION ALL
SELECT 1, 4
UNION ALL
SELECT 2, 1
SELECT m.ItemNAme,SUM(I.rating) as Rating
FROM #Item m INNER JOIN #ItemRating I ON m.ID=I.ItemID
group by m.ItemNAme
ORDER BY SUM(I.rating) asc
--OR same thing can achive
SELECT ItemNAme, Rating
FROM (
SELECT m.ItemNAme,SUM(I.rating) as Rating
FROM #Item m INNER JOIN #ItemRating I ON m.ID=I.ItemID
group by m.ItemNAme
)P
ORDER BY Rating Deschttps://stackoverflow.com/questions/32796879
复制相似问题