有人可以帮我解决这个问题:
SELECT su.name,su.imdb , su.id, su.owner, COUNT(*) AS count
FROM subhits AS h LEFT JOIN subtitles AS su ON h.subid=su.id
WHERE su.added BETWEEN '" . $lweek . "' AND '" . $today . "'
GROUP BY h.subid
ORDER BY count DESC LIMIT 15
返回值:
name imdb id owner count
*Angels and Demons WTV /title/tt0808151/ 3337 3055 120
Terminator Salvation 2009 /title/tt0438488/ 3539 26 120
Friday The 13th-WTV /title/tt0758746/ 3334 26 82
Night at the Museum /title/tt1078912/ 3548 7170 75
*Angels and Demons WTV2 /title/tt0808151/ 3512 12 10
*重复的IMDB
如您所见,它返回具有相同imdb的结果。 我想要做的是获得最高计数,但从结果中排除最低的imdb计数。
答案 0 :(得分:0)
答案 1 :(得分:0)
试试这个:
SELECT su.name
, su.imdb
, su.id
, su.owner
, (SELECT COUNT(*) FROM dbo.subhits AS h WHERE h.subid = su.id) AS count
FROM dbo.subtitles AS su
ORDER BY count DESC LIMIT 15
编辑:使用提供的其他信息,我有一个几乎可行的解决方案,但卡住了。结合Chris Simpson的答案和部分解决方案,我想出了这个。它避免了临时表,并且缺少其他Chris没有时间完成的部分。我在MSSQL中构建它,因此可能需要调整才能在MySQL中工作。如果没有您的数据,我也无法保证信息是正确的,但这可能有所帮助。
SELECT a.id
, (SELECT su.name FROM dbo.subtitles su WHERE a.id = su.id LIMIT 1)
, a.imdb
, (SELECT su.owner FROM dbo.subtitles su WHERE a.id = su.id LIMIT 1)
, a.count
FROM
(
SELECT su.id
, su.imdb
, COUNT(*) AS count
FROM dbo.subtitles su
INNER JOIN dbo.subhits sh ON su.id = sh.subid
GROUP BY su.id, su.imdb
) a
INNER JOIN
(
SELECT c.imdb
, MAX(c.count) AS maxCount
FROM
(
SELECT su.id
, su.imdb
, COUNT(*) AS count
FROM dbo.subtitles su
INNER JOIN dbo.subhits sh ON su.id = sh.subid
GROUP BY su.id, su.imdb
) c
GROUP BY c.imdb
) b ON a.imdb = b.imdb AND a.count = b.maxCount
ORDER BY a.count DESC LIMIT 15
答案 2 :(得分:0)
我不想这么说,但这是临时表可能有帮助的极少数情况之一。如果你把结果放在:
select
imdb,
id,
count(*) as cnt
from subtitles
group by
imdb,
id
..进入临时表,然后你可以得到你真正想要的行:
select
t.imdb,
t.id,
t.cnt
from MyTempTable t
inner join
(
select
imdb,
max(cnt) as maxcnt
from MyTempTable
group by
imdb
) as drv on t.imdb = drv.imdb and t.cnt = drv.maxcnt
..并且上述结果可以重新连接到主表中,而无需再次分组。
这有帮助吗?
抱歉没有把所有的SQL都放进去,但是时间紧迫了。这将执行您想要的操作,但如果计数相同,仍会重复。如果您关心它,可以修改查询以处理此问题。
另外,当你没有从左手表中显示任何数据时,我不确定为什么你还要加入声明?
答案 3 :(得分:0)
与Oracle相比,我喜欢MySQL,不使用分组功能就可以选择其他不属于GROUP BY的字段。下面的查询执行的是查询并通过imdb对其进行分组,imdb选择具有最高计数的唯一imdb(在subselect中将首先出现在降序排序中)。试一试,看看它是否适合你。
SELECT name, imdb, id, owner, count
FROM
(
SELECT su.name,su.imdb , su.id, su.owner, COUNT(*) AS count
FROM subhits AS h LEFT JOIN subtitles AS su ON h.subid=su.id
WHERE su.added BETWEEN '" . $lweek . "' AND '" . $today . "'
GROUP BY h.subid
ORDER BY count DESC
)
GROUP BY imdb
LIMIT 15
答案 4 :(得分:0)
我会尝试自己测试一下,但我没有你的数据或好的样本来测试。
SELECT su.name,su.imdb , su.id, su.owner, COUNT(*) AS counter
FROM subhits AS h LEFT JOIN subtitles AS su ON h.subid=su.id
WHERE su.added BETWEEN '" . $lweek . "' AND '" . $today . "'
GROUP BY h.subid
having max(counter)
ORDER BY count DESC LIMIT 15