[英]Complex sql query with join and count
我目前在编写 SQL 查询时遇到问题,
我有 3 个表:
ID | 姓名 |
---|---|
1个 | 光环 |
2个 | 绿巨人 |
ID | 游戏编号 | |
---|---|---|
1个 | 1个 | (类型 ID 1 到游戏 ID 1) |
2个 | 1个 | (类型 ID 2 到游戏 ID 1) |
2个 | 2个 | (类型 ID 2 到游戏 ID 2) |
3个 | 2个 | (类型 ID 3 到游戏 ID 2) |
ID | 游戏编号 | |
---|---|---|
2个 | 1个 | (标签 id 2 到游戏 id 1) |
2个 | 2个 | (标签 id 2 到游戏 id 2) |
1个 | 2个 | (标签 id 1 到游戏 id 2) |
这是我想要的结果,寻找具有最多类型 IN(2,3) 和大多数标签 IN(1) 的游戏
videos_games.name | 计数标签 | 公共标签 | 计数流派 | 常见类型 |
---|---|---|---|---|
绿巨人 | 1个 | 1个 | 2个 | 2,3 |
光环 | 0 | 空的 | 1个 | 2个 |
我目前有这个,这是一个语法错误
SELECT name,id,
COUNT(distinct games_genres.id) as num_genres, COUNT(distinct
games_tags.id) as num_genres INNER JOIN games_genres ON
(videos_games.id = games_genres.game_id) INNER JOIN games_tags ON
(videos_games.id = games_tags.game_id)
WHERE
games_to_genres.genre_id IN(3,10) games_tags.genre_id IN(31,7)
ORDER BY
deus_games.num_genres DESC
如果有人这样做,我将非常感激!
我假设您要通过GROUP BY
查询请求COUNT(*)
。
您还需要合并几个结果表。
就像是
SELECT name, COUNT(*)
FROM
(SELECT name
FROM videos_games
INNER JOIN game_tags
ON game_tags.game_id = videos_games.id
WHERE game_tags.id IN(10, 3)
UNION ALL
SELECT name
FROM videos_games
INNER JOIN games_genres
ON games_genres.game_id = videos_games.id
WHERE games_genres.id IN(17, 22)) AS nameslist
GROUP BY NAME
ORDER BY COUNT(*) DESC ;
请参阅此处的示例https://sqltest.net/#1191095
编辑:我明白了,然后为了将常见标签和流派的列表以及它们的数量分开,你需要这样的东西
SELECT name, COALESCE (count_tags, 0), common_tags,
COALESCE (count_genres, 0), common_genres
FROM videos_games
LEFT OUTER JOIN
(SELECT game_id, COUNT(*) count_tags, GROUP_CONCAT(id SEPARATOR ', ') common_tags
FROM game_tags
WHERE id IN (2, 3)
GROUP BY game_id) AS tag_tab
ON tag_tab.game_id = videos_games.id
LEFT OUTER JOIN
(SELECT game_id, COUNT(*) count_genres, GROUP_CONCAT(id SEPARATOR ', ') common_genres
FROM games_genres
WHERE id IN (1)
GROUP BY game_id) AS genre_tab
ON genre_tab.game_id = videos_games.id
如果您想按计数总和进行ORDER BY
,请确保它们是数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.