我有一个现有的SQL查询,需要添加条件。 我正在SequelPro 1.0.2中对此进行测试。
这是现有查询的样子:
SELECT distinct c.cue_id, c.*, cat.cat_name, s.style_name, t.tempo_name
FROM cues c
left join categories cat on c.cat_id = cat.cat_id
left join styles s on c.style_id = s.style_id
left join tempos t on c.tempo_id = t.tempo_id
inner join master_cue_id m on m.cue_id = c.cue_id
WHERE ( (c.key_id_arry LIKE '%108500%' ) )
AND c.cue_status = 'Active'
ORDER BY (
CASE WHEN (key_id_arry LIKE '108500,%' OR key_id_arry LIKE '%,108500' OR key_id_arry LIKE '%,108500,%')
THEN 1 ELSE 2 END), c.cue_rating DESC, c.cue_title, c.cue_trk_num ASC
以下是我需要添加的条件:
提示表上有一列称为cue_rating(INT 0-10)。 我需要返回单个评分最高的提示PER master_cue_id(每个master_cue_id大约有四到五个cue_id)。
如果cue_ratings相同,则需要获得最低的cue_id。
这是到目前为止我尝试过的。
SELECT distinct c.cue_id, c.*, cat.cat_name, s.style_name, t.tempo_name
FROM cues c
left join categories cat on c.cat_id = cat.cat_id
left join styles s on c.style_id = s.style_id
left join tempos t on c.tempo_id = t.tempo_id
inner join master_cue_id m on m.cue_id = c.cue_id
INNER JOIN
(SELECT MAX(c2.cue_rating) AS MaxCueRating, MIN(c2.cue_id) AS MinId, m2.master_cue_id
FROM cues c2
INNER JOIN master_cue_id m2
ON m2.cue_id = c2.cue_id
GROUP BY m2.master_cue_id) maxratedcues
ON m.master_cue_id = maxratedcues.master_cue_id
AND c.cue_rating = maxratedcues.MaxCueRating
WHERE ( (c.cue_desc LIKE '%futurebass%') ) and c.cue_status = 'Active'
GROUP BY m.master_cue_id
ORDER BY (CASE WHEN (key_id_arry LIKE '108500,%' OR key_id_arry LIKE '%,108500' OR key_id_arry LIKE '%,108500,%')
THEN 1 ELSE 2 END), c.cue_rating DESC, c.cue_title, c.cue_trk_num ASC
我希望每个master_cue_id都能获得最高评分的提示。结果数量是正确的,但是我没有得到最高评价的提示。
我什至尝试简化查询,使其只返回每个master_cue_id最高评分的提示,而不使用关键字搜索查询:
SELECT * FROM cues
INNER JOIN master_cue_id m
ON cues.cue_id = m.cue_id
WHERE cue_rating =
(SELECT MAX(c.cue_rating)
from cues as c
INNER JOIN master_cue_id m2
ON m2.cue_id = c.cue_id
WHERE cues.cue_id = c.cue_id
)
GROUP BY m.master_cue_id
具有讽刺意味的是,这似乎返回了一些最高评分的线索(如果它们都具有相同的评分),但实际上却返回了最低评分的线索。
编辑:SQLFIDDLE