2011-04-04 435 views
0

显示包含词语发现,发现者,发现,发现和发现摘要中的20个奖项的标题和奖励数量。使用SQL查找独特价值

我的查询:

SELECT title, count(award), abstract 
FROM poop 
ORDER BY award 
WHERE abstract LIKE discov% 
LIMIT 20 

ike table

它不喜欢我的where子句...有人吗? (在mySQL中)

+0

我们要求学术诚信,用'homework'标记它。如果这不适用于您,道歉,请忽略评论。 – RichardTheKiwi 2011-04-04 23:10:04

+0

我没有看到'抽象'列... – bdares 2011-04-05 01:34:12

回答

1

此查询假设每个pi有不同的奖励。

SELECT COUNT(distinct award), pi 
FROM [tablename] 
GROUP BY pi 
ORDER BY COUNT(distinct award) DESC 

拥有最多奖项的州。

SELECT TOP 20 COUNT(distinct award), state 
FROM [tablename] 
GROUP BY state 
ORDER BY COUNT(distinct award) 

如果您不使用T-SQL,请删除TOP 20。

+0

第二个sql命令在mysql中不起作用... – Jshee 2011-04-04 22:48:29

+1

@woopie:你没有提到你正在使用哪个RDBMS。注意答案中的警告?删除'TOP 20'并使用'LIMIT 0,20' – 2011-04-04 22:56:57

2

你缺少在你的标准的单引号,你只是在寻找一个与“discov”,你的ORDER BY子句是在错误的地方开始话,您使用的是COUNT()表达不进行分组由其他非集合领域。为了解决这个问题并查找包含“discov”字样,使用此:

SELECT title, abstract, count(award), 
FROM table 
WHERE abstract 
LIKE '%discov%' 
GROUP BY title, abstract 
ORDER BY count(award) 
LIMIT 20 

如果你真的没有意思只是看开头“discov”的话,那么用这个:

SELECT title, abstract, count(award), 
FROM table 
WHERE abstract 
LIKE 'discov%' 
GROUP BY title, abstract 
ORDER BY count(award) 
LIMIT 20 
+0

这给phpmyadmin一个错误:'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第4行'WHERE abstract LIKE'discov%'LIMIT 20'附近使用正确的语法。 – Jshee 2011-04-05 01:17:43

+0

这不起作用。 – Jshee 2011-04-05 01:19:21

+0

@woopie我错过了你的订单条款起初在错误的地方;我已经纠正了这一点。现在就试试。 – 2011-04-05 01:34:03

1
各地discov

失踪'和ORDER BYWHERE被反转:

SELECT title, count(award) AS count_award, abstract 
    FROM table 
WHERE abstract LIKE 'discov%' 
GROUP BY title, abstract 
ORDER BY count_award DESC 
LIMIT 20 
+0

这会引发错误。 – Jshee 2011-04-05 01:33:23

+0

和什么是错误信息? – manji 2011-04-05 01:35:45

+0

你的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以便在第2行 – Jshee 2011-04-05 01:47:03