这是完整的表格:(代码在末尾)

query = """
SELECT * FROM businesses
"""
df = pd.read_sql_query(query, conn)
df

businesses table

我想要一个单一的SQL查询,找到前两个流行的城市,其中业主至少有2家store .预计输出为伦敦和莱斯特:

tables

我目前知道如何按城市分组,以找到前两个城市:

# Top 2 popular cities
query1 = """
SELECT city, COUNT(*) as frequency
FROM businesses
GROUP BY city
ORDER BY frequency DESC
LIMIT 2
"""
df = pd.read_sql_query(query1, conn)
df

以及如何筛选至少有2家店铺的店主:

# Owners who have at least 2 shops
query2 = """
SELECT owner, COUNT(*) AS count
FROM businesses
GROUP BY owner
HAVING count >= 2
ORDER BY count DESC
"""
df = pd.read_sql_query(query2, conn)
df

但我不知道如何将查询1和查询2组合到一个查询中.

我非常感谢您在这方面提供的任何帮助,try 自学SQL:)

以下是创建数据库的代码,如果您愿意遵循:

# import libraries
import pandas as pd
import sqlite3

# create database
conn = sqlite3.connect("my_db.db")

# create table
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS businesses;")
query = """
CREATE TABLE IF NOT EXISTS businesses (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    city TEXT NOT NULL,
    owner TEXT NOT NULL
    )
"""
cur.execute(query)
conn.commit()

# add rows to table
query = """
INSERT INTO businesses
    (id, name, city, owner)
VALUES
    (1, "Shop A", "London", "Tom"),
    (2, "Shop B", "London", "Tom"),
    (3, "Shop C", "London", "Tom"),
    (4, "Shop D", "Luton", "Alice"),
    (5, "Shop E", "Leeds", "Jenny"),
    (6, "Shop F", "Leicester", "James"),
    (7, "Shop G", "Leicester", "James"),
    (8, "Shop H", "Leicester", "Emma"),
    (9, "Shop I", "Leicester", "Emma"),
    (10, "Shop J", "Liverpool", "James"),
    (11, "Shop K", "Liverpool", "James"),
    (12, "Shop L", "Liverpool", "George"),
    (13, "Shop M", "Shefield", "Mary"),
    (14, "Shop N", "Shefield", "Mary"),
    (15, "Shop O", "Cambridge", "Oliver"),
    (16, "Shop P", "Manchester", "Harry")
"""
cur.execute(query)
conn.commit()

推荐答案

您应该按城市和所有者分组,在HAVING子句中过滤结果,然后使用SUM()窗口函数获取每个城市的计数:

SELECT DISTINCT city, 
       SUM(COUNT(*)) OVER (PARTITION By city) AS count
FROM businesses
GROUP BY city, owner
HAVING COUNT(*) >= 2
ORDER BY count DESC LIMIT 2;

See the demo.

Sql相关问答推荐

SQL查询以创建手头的流动余额?

从2个表中查找每条记录的唯一最接近的日期匹配

在Postgres中实现合并功能的干净方法,因为当目标/源不匹配时

删除事务中的本地临时表

雅典娜嵌套Json提取液

将FLOAT转换为VARBINARY,然后再转换回FLOAT

在Netezza SQL中将字符DataType转换为整型DataType

Select 列组(按同一表格中的另一列分组)Laravel 10

WooCommerce产品的SQL查询:获取sku和产品标签

使用与JOIN一起使用的查询后进行分页和排序

将伪数据插入Postgres表

计算不同模式的时间跨度

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

使用多个数据库调用重载 CQRS 模式

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

比使用NOT EXISTS更高效的SQL删除方法是什么?

COBOL\DB2作业(job)需要帮助?快来获取专业指导!

所有列分组的简写?

带聚合函数的 percentile_cont

为什么 get_json_object() 无法从存储在 Hive SQL 表中的 JSON 中提取值?