我有一张很大的桌子,叫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

10-06 06:30