我正在使用MySQL WORLD数据库.
对于每个大陆,我想返回人口最多的国家的名称.
我能够提出一个有效的查询.尝试查找仅使用连接的另一个查询并避免使用子查询.
有没有办法使用JOIN编写此查询?
SELECT Continent, Name
FROM Country c1
WHERE Population >= ALL (SELECT Population FROM Country c2 WHERE c1.continent = c2.continent);
+---------------+----------------------------------------------+
| Continent | Nanme |
+---------------+----------------------------------------------+
| Oceania | Australia |
| South America | Brazil |
| Asia | China |
| Africa | Nigeria |
| Europe | Russian Federation |
| North America | United States |
| Antarctica | Antarctica |
| Antarctica | Bouvet Island |
| Antarctica | …
Run Code Online (Sandbox Code Playgroud) 我的数据库中有库存数量信息.
1表,"stock",保存productid(sku)以及它来自的数量和文件名.
另一个表"stockfile"包含所有已处理的文件名以及日期.
现在我需要获得所有产品的最新库存数量值.
这给了我所有产品的所有库存数量(产生300.000条记录)
SELECT stock.stockid,stock.sku,stock.quantity,stockfile.filename,stockfile.date
FROM stock
INNER JOIN stockfile ON stock.stockfileid = stockfile.stockfileid
ORDER BYstock
.sku
ASC
我已经尝试过了:
SELECT*FROM stock
INNER JOIN stockfile ON stock.stockfileid = stockfile.stockfileid
GROUP BY sku
HAVING stockfile.date = MAX(stockfile.date)
ORDER BYstock
.sku
ASC
但它没有用
SHOW CREATE TABLE库存:
CREATE TABLE
stock
(
stockid
bigint(20)NOT NULL AUTO_INCREMENT,
sku
char(25)NOT NULL,
quantity
int(5)NOT NULL,
creationdate
datetime NOT NULL,
stockfileid
smallint(5)unsigned NOT NULL,
touchdate
datetime NOT NULL,
PRIMARY KEY(stockid
)
)ENGINE …
假设我的查询结果如下:
ID NAME Phone
---- ---- -----
1 Bob 111-111-1111
1 Bob 222-222-2222
1 Bob 333-333-3333
2 Stan 555-555-5555
3 Mike 888-888-8888
3 Mike 777-777-7777
Run Code Online (Sandbox Code Playgroud)
我想只返回每个ID值的单行实例.对我来说无关紧要的是我得到的多行中的哪一行 - 集合中的第一行是好的.
所以可能的结果是:
ID NAME Phone
---- ---- -----
1 Bob 111-111-1111
2 Stan 555-555-5555
3 Mike 888-888-8888
Run Code Online (Sandbox Code Playgroud) 如果我有一个包含以下字段的表格
ID, SomeFK, SomeTime
Run Code Online (Sandbox Code Playgroud)
如何编写查询返回每个的最新/前3项(基于SomeTime
)SomeFK
.
所以,结果可能看起来像
SomeFK Sometime
0 2012-07-05
0 2012-07-04
0 2012-07-03
1 2012-07-03
1 2012-07-02
1 2012-07-01
2 2012-07-03
2 2012-07-02
2 2012-07-01
....etc....
Run Code Online (Sandbox Code Playgroud)
返回特定的最新项目SomeFK
很容易,但我只是想不出如何为上述做.我也觉得应该死得很简单!
编辑:
道歉,我错过了一些关键信息.这是针对SQL2000的,所以ROW_NUMBER()
无法使用!
我有下表
我使用以下查询,我收到了错误消息.我可以确定错误的原因,但我该如何解决呢
select min(id),customer_id,created_at from thunderbolt_orders
group by customer_id
Run Code Online (Sandbox Code Playgroud)
我需要最小id的customer_id和created_at如何实现它.
我有一个有3列的表Item
,City
和VisitNumber
.
在这张表中有很多记录,我需要选择每个城市的前20项(根据他们的访问数量).
例如,如果华盛顿有100个项目,纽约有250个项目,洛杉矶有500个项目,我需要为每个城市选择60个最常访问的行(华盛顿20个,纽约20个,洛杉矶20个)
怎么可能TSQL
?
我有一个PostgreSQL表,其中包含以下相关字段:
url
title
created_at
Run Code Online (Sandbox Code Playgroud)
可以有许多行包含相同的URL但标题不同.以下是一些示例行:
www.nytimes.com | The New York Times | 2016-01-01 00:00:00`
www.wsj.com | The Wall Street Journal | 2016-01-03 15:32:13`
www.nytimes.com | The New York Times Online | 2016-01-06 07:19:08`
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取列出以下字段的输出:
1)url
2)title
对应于该唯一created_at
的全部计数的最高值3)title
url
因此,上面示例的输出行看起来像这样:
www.nytimes.com | The New York Times Online | 2
www.wsj.com | The Wall Street Journal | 1
Run Code Online (Sandbox Code Playgroud)
基于我在类似问题上阅读的众多SO帖子,看起来我获得前两个字段(url
和最新title
)的最佳选择是使用DISTINCT ON
:
select distinct on (url) url, title from headlines order by url, …
Run Code Online (Sandbox Code Playgroud) sql postgresql aggregate greatest-n-per-group window-functions
如果我有这样的表格:
id name value
1 abc 1
2 def 4
3 ghi 1
4 jkl 2
Run Code Online (Sandbox Code Playgroud)
如何选择一个仍然id, name, value
只有最小值的新表.
在这个例子中我需要这个表:
1 abc 1
3 ghi 1
Run Code Online (Sandbox Code Playgroud) 下面的代码适用于SELECT语句:
WITH
smaller_uuid AS (
SELECT
id, uuid, email, first_name, last_name, display_name
FROM stack_users_production.users AS user1
WHERE EXISTS (
SELECT
id, uuid, email
FROM
stack_users_production.users AS user2
WHERE
user1.id = user2.id AND
user1.email = user2.email AND
user1.uuid < user2.uuid
)
)
SELECT
id, uuid, email, first_name, last_name, display_name
FROM
stack_users_production.users
WHERE
uuid IN (SELECT uuid FROM smaller_uuid);
Run Code Online (Sandbox Code Playgroud)
但是下面的代码不适用于DELETE语句:
WITH
smaller_uuid AS (
SELECT
id, uuid, email, first_name, last_name, display_name
FROM stack_users_production.users AS user1
WHERE EXISTS (
SELECT
id, uuid, email …
Run Code Online (Sandbox Code Playgroud) 我有一个表格,有以下方案(idMovie,流派,标题,评级).
如何查询返回每种类型的最佳评级的十部电影?
我认为可以使用'ORDER BY'和'LIMIT'来解决一个类型的前10名,但我不知道如何为每种类型做到这一点.
免责声明:我是sql的新手.
sql ×9
postgresql ×4
mysql ×2
sql-server ×2
aggregate ×1
group-by ×1
join ×1
ms-access ×1
select ×1
t-sql ×1