下面SQL
代码假设表名为T,运行时请将表名T更改为实际表名,其它地方请不要动。这段代码已经实测通过。上机试试吧! SELECT T.* FROM T INNER JOIN (SELECT NAME FROM (SELECT NAME,COUNT(*) AS QTY FROM T GROUP BY NAME)A WHERE A.QTY>1)B ON T.NAME=B.NAME ORDER BY T.NAME,T.ID 说明:这段代码看上去虽然比较复杂,尽管有其它比较简单的
写法,但是我觉得这个写法在表数据量较大时效率会更高一些。 再给一个稍微简单的写法,其效率也差不多。 SELECT T.* FROM T, (SELECT NAME FROM T GROUP BY NAME HAVING COUNT(*)>1)A WHERE T.NAME=A.NAME ORDER BY T.NAME, T.ID你的问题“查询一张表中
字段A 相同的记录数大于1条的记录” -- 我认为有一点笔误,因为在你提供的表中没有叫做“A”的字段,所以我上面的答案是基于问题“查询一张表中 字段NAME 相同的记录数大于1条的记录”而做出的。 如果你问题的实际要求是“查询一张表中 字段NAME 等于A,且其记录数大于1条的记录”那么只要对我上面的SQL语句加一个“Where” *** 作符就可以解决。以第二个SQL语句为例,这样写: SELECT T.* FROM T, (SELECT NAME FROM T WHER NAME='A' GROUP BY NAME HAVING COUNT(*)>1)A WHERE T.NAME=A.NAME ORDER BY T.NAME, T.ID 尊敬的“冰风舞雨”先生如果你觉得我的回答无聊,请投诉并删除本人的作答。作为一个认真的答题者,总是希望提问者能给一个回复,不管评价是好还是坏。~可以用 CONCAT把查询语言与变量连接起来再执行,参考如下代码。
DELIMITER //
CREATE PROCEDURE GetItems()
BEGIN
SELECT @total := count(id) FROM items
SET @sql = CONCAT('SELECT id, title FROM items LIMIT 0,', CEIL(@toal/2))
PREPARE stmt FROM @sql
EXECUTE stmt
END //
DELIMITER
希望这个思路对你有帮助,可以将limit后面设置为变量!
其一:给连续相同的type编号,即大 1 大2 大3 小1 小2……,这个需要用到用户变量
其二:编号后进行条件过滤
其三:分组统计
这三个可以写成一个SQL!
评论列表(0条)