我的表名为items
。它包含item_id
和source
列以及其他一些列。
我想按item_id
排序选择,但我也希望结果的source
列中没有任何重复项。
此查询有什么问题?
SELECT *
FROM items
WHERE item_section='sp_500'
ORDER BY item_id DESC
GROUP BY source
LIMIT 3
答案 0 :(得分:4)
应该像这样工作:
SELECT *
FROM items
JOIN (
SELECT max(item_id) AS item_id
FROM items
WHERE item_section = 'sp_500'
GROUP BY source
ORDER BY 1 DESC
LIMIT 3
) i USING (item_id)
1)按item_section = 'sp_500'
2)折叠source
中具有相同GROUP BY
的多个项目,因为:
源列中没有任何重复项
我选择最item_id
每source
- 似乎最合理,你没有说明。
3)ORDER BY item_id DESC
获得最大的和LIMIT 3(现在没有欺骗)。
4)JOIN
到原始表格以获取所选item_id
的整行。
答案 1 :(得分:1)
首先,当您拥有*
子句时,无法选择所有GROUP BY
。您可以在查询中选择source
以及其他一些功能,例如count(*)
其次,您无法按item_id
订购。您可以按source
和其他一些功能订购。
第三,order by
应该在group by
之后
答案 2 :(得分:1)
第一件事是order by item_id
追踪group by
。共同规则:分组...... HAVinG ...按...排序。
答案 3 :(得分:0)
将其更改为: -
SELECT DISTINCT fieldnames FROM items WHERE item_section='sp_500' GROUP BY source ORDER BY item_id DESC LIMIT 3
在DISTINCT中,您必须指定字段名称。
答案 4 :(得分:0)
您无法合并select *
和group by
如果您只需要选择唯一的行,请使用
SELECT DISTINCT item_id, source
FROM items
WHERE item_section='sp_500'
ORDER BY item_id DESC`
答案 5 :(得分:0)
使用此
SELECT * FROM items
WHERE item_section='sp_500'
GROUP BY source
ORDER BY item_id DESC LIMIT 3
Gudluck !!
答案 6 :(得分:0)
更改查询
SELECT *
FROM items
WHERE item_section='sp_500'
GROUP BY source
ORDER BY item_id DESC
LIMIT 3
如果没有结果,那么尝试删除where子句或更改item_section的值,你可能没有得到这个item_section的输出
希望这会有所帮助