我有一张很大的桌子,叫fullNames
:
+----+-----------+----------+--------+
| id | name1 | name2 | count |
+----+-----------+----------+--------+
| 1 | Homer | Simpson | 2 | <-- Homer clicked Simpson's name 2 times
| 2 | Bart | Simpson | 1 | <-- Bart clicked Simpson's name once
| 3 | Simpson | Bart | 4 | <-- Simpson clicked Bart's name 4 times
......................................
......................................
| 80 | Steven | Baldwin | 7 | <-- Steven clicked Baldwin's name 7 times
| 81 | Alec | Baldwin | 6 | <-- Alec clicked Balwin 6 times, but there's NO relationship w/ Steven's clicks
+-------+--------+----------+--------+
本质上,我需要能够确定给定用户(
name1
)单击给定名称(name2
)的次数,然后确定相反的次数-单击name2
的次数。当辛普森加载他的页面时,他应该会看到一个根据包含他的名字的匹配对的组合name1
排列的名字列表。列表如下:Bart 5
Homer 2
当有一个点击,我可以插入表没有问题,但我不知道如何查询这样的东西。。。我想它最终需要以JSON对象/数组的形式出现,这样就可以制作成一个本地移动应用程序,所以如果你也想这样做的话,就可以获得额外的积分!
最佳答案
对于Simpson
,您希望包含名称为“Simpson”的行,但要选择(并计算)的名称是“non-Simpson”名称。你可以这样做:
SELECT
CASE WHEN Name1 <> 'Simpson' THEN Name1 ELSE Name2 END AS ClickName,
SUM(count) AS ClickCount
FROM fullNames
WHERE 'Simpson' IN (Name1, Name2)
GROUP BY CASE WHEN Name1 <> 'Simpson' THEN Name1 ELSE Name2 END
ORDER BY ClickCount DESC