按两个值分组

时间:2014-12-17 17:14:04

标签: mysql sql

我有以下查询:

SELECT
    items.*
FROM
    `items` 
INNER JOIN
    `users` ON `items`.`owner` = `users`.`id` 
GROUP BY
    `items`.`owner` 
LIMIT
    10

我确保它按用户分组(每个用户只能获取一个项目),但我也希望确保类别为“1”的项目只显示一次。

但这不起作用。好吧,查询成功,但它没有按类别分组。仍会显示多个类别。有什么想法吗?

我在这里创建了一个SQLFiddle:http://sqlfiddle.com/#!2/0a4bad/1

而不是输出:

+----+----------+-------+
| ID | CATEGORY | OWNER |
+----+----------+-------+
|  1 |        1 |     1 |
|  2 |        1 |     2 |
|  3 |        1 |     3 |
|  4 |        2 |     4 |
|  5 |        2 |     5 |
+----+----------+-------+

应输出:

+----+----------+-------+
| ID | CATEGORY | OWNER |
+----+----------+-------+
|  1 |        1 |     1 |
|  4 |        2 |     2 |
|  5 |        2 |     4 |
|  5 |        2 |     5 |
|  8 |        3 |     3 |
+----+----------+-------+

(通知类别1仅显示为ONCE)。

我想确保每个所有者只显示一个项目,然后可以确保特定类别(比如1和5)只显示一次。第1类和第5类人口过多,如果不受限制,它们将占产出的90%。

2 个答案:

答案 0 :(得分:0)

您可以使用DISTINCT检索唯一数据:

SELECT DISTINCT items.category

答案 1 :(得分:0)

select * from items t1
where category not in (1,2)
or not exists (
    select 1 from items t2
    where t2.id < t1.id
    and t2.category = t1.category
)
group by owner

http://sqlfiddle.com/#!2/0a4bad/27