【问题标题】:Limit results instead of group results限制结果而不是分组结果
【发布时间】:2013-03-05 18:36:04
【问题描述】:

我正在努力寻找正确的答案,在互联网上寻找如何做到这一点,我有一个加入和一个小组。当我在末尾添加一个限制时,它会限制组而不是实际结果。

SELECT COUNT(*) AS `numrows`, `people`.`age` 
FROM (`events`) 
JOIN `people` 
ON `events`.`id` = `people`.`id`
WHERE `people`.`priority` = '1' 
GROUP BY `people`.`age` 
ORDER BY `numrows` 
LIMIT 150

限制总是在变化,所以这需要是动态的,想法是错过两个表中的前 150 或 x 行,但不是限制组。

EDIT= 我想我已经解释得很糟糕了,我实际上想从 150 行或 x 开始,限制是我知道动态执行此操作的唯一方法。所以这个想法是如果最后一次搜索检索到 150 行,那么让我们说下次有 250 个结果,但我想忽略上次找到的前 150 个等。希望这更有意义。

连接中的 WHERE 之后需要有限制或开始,我认为这是唯一可行的地方。

编辑 SQL =

SELECT COUNT( * ) AS `numrows`, `people`.`age`
FROM (
SELECT `id`, `events`.`pid`
FROM `events`
ORDER BY `id`
LIMIT 1050
)limited
JOIN `people` ON `people`.`age` = limited.id
WHERE `people`.`priority` = '1'
GROUP BY `people`.`age`
ORDER BY `numrows` DESC

感谢您的帮助

【问题讨论】:

  • 我不太明白你的问题
  • 你想完成什么? SQL 格式正确,可以检索 150 行输出集。

标签: mysql database


【解决方案1】:

我怀疑你的意思是这样的?

SELECT COUNT(*) AS numrows, people.age
FROM (
SELECT id FROM events ORDER BY id LIMIT 150
) limited
JOIN people ON people.id = limited.id
GROUP BY people.age
ORDER BY numrows;

【讨论】:

  • 好吧,这几乎奏效了,但是因为我解释得很糟糕,它并没有做我想做的事情,它确实限制了事件表,但是它错过了结果,因为我错过了一个 where更改的条款请看上面
【解决方案2】:

我在时间戳上使用 where between 来做到这一点,这似乎是唯一明智的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多