我有一个简单的查询,它返回 id 列表..
例如。select id from users;
这会返回 ids 列表,但我需要另一个 x 列(不适用于用户表或数据库中的任何其他表)以及我将给出的一些常量值。我可以在查询id后用Js或其他语言实现这一点。但只需要知道是否有任何方法可以在查询本身中做到这一点。
当前结果:
id
---
1
2
3
Run Code Online (Sandbox Code Playgroud)
预期结果:
id some_new_column
--- ---
1 abc
2 abc
3 abc
Run Code Online (Sandbox Code Playgroud)
其中some_new_column和abc,两者都应在查询中提供。
不确定这是否可能。任何线索/帮助表示赞赏。
我有两个 MySQL 表:
User (id, name)
Sale (id, user, item)
Run Code Online (Sandbox Code Playgroud)
Sale(user)的外键在哪里User(id),所以这是一对多的关系(一个用户可以进行多次销售)。
我试图从数据库中获取它并以 JSON 格式为多个用户返回它,所以它看起来像这样:
[
{
"id": 1,
"name": "User 1",
"sales": [
{
"id": 1,
"item": "t-shirt"
},
{
"id": 2,
"item": "jeans"
}
]
},
{
"id": 2,
"name": "User 2",
"sales": [
{
"id": 3,
"item": "sweatpants"
},
{
"id": 4,
"item": "gloves"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
其中“销售”实体嵌套在其相应“用户”的实体中。
所以问题是,从数据库查询并将其转换为 JSON 的最佳方法是什么?我可以为所有用户运行查询,然后遍历每个用户并运行查询以获取他们的销售额,但这很慢。或者,我可以在用户和销售之间进行外部连接,然后在代码中将其解析为 JSON 格式,但这会从数据库发送多余的信息(包括每个销售的整个用户数据集),并且需要循环遍历所有数据代码。有没有方便的方法来做到这一点?顺便说一下,我使用的是 Python 3.7。
我们将信息保存在一个 json 列中,该列包含一个数组中的 json 数据。
数据结构:
[
{
"type":"automated_backfill",
"title":"Walgreens Sales Ad",
"keyword":"Walgreens Sales Ad",
"score":4
},
{
"type":"automated_backfill",
"title":"Nicoderm Coupons",
"keyword":"Nicoderm Coupons",
"score":4
},
{
"type":"automated_backfill",
"title":"Iphone Sales",
"keyword":"Iphone Sales",
"score":3
},
{
"type":"automated_backfill",
"title":"Best Top Load Washers",
"keyword":"Best Top Load Washers",
"score":1
},
{
"type":"automated_backfill",
"title":"Top 10 Best Cell Phones",
"keyword":"Top 10 Best Cell Phones",
"score":1
},
{
"type":"automated_backfill",
"title":"Tv Deals",
"keyword":"Tv Deals",
"score":0
}
]
Run Code Online (Sandbox Code Playgroud)
我们正在尝试什么:
SELECT id, ad_meta->'$**.type' FROM window_requests
Run Code Online (Sandbox Code Playgroud)
返回:
我们希望将每种类型作为行,我认为这只能通过存储过程实现,返回整列,然后在每一行上运行循环并返回数据...
或者你能想到更好的解决方案吗?
更新架构:
或者我们应该更改我们的数据库并将信息保存在单独的表中而不是 json …
我有下表:
+------------+-------+
| SchoolName | Marks |
+------------+-------+
| A | 71 |
| A | 71 |
| A | 71 |
| B | 254 |
| B | 135 |
| B | 453 |
| B | 153 |
| C | 453 |
| C | 344 |
| C | 223 |
| B | 453 |
| D | 300 |
| D | 167 |
+------------+-------+
Run Code Online (Sandbox Code Playgroud)
这是按学校名称分组的平均分:
+------------+------------+
| SchoolName | avg(Marks) …Run Code Online (Sandbox Code Playgroud) 我正在使用数据库客户端来测试。
使用EXPLAIN ANALYZE:
Hash Join (cost=5.02..287015.54 rows=3400485 width=33) (actual time=0.023..1725.842 rows=3327845 loops=1)
Hash Cond: ((fact_orders.financial_status)::text = (include_list.financial_status)::text)
CTE include_list
-> Result (cost=0.00..1.77 rows=100 width=32) (actual time=0.003..0.004 rows=4 loops=1)
-> ProjectSet (cost=0.00..0.52 rows=100 width=32) (actual time=0.002..0.003 rows=4 loops=1)
-> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.000..0.000 rows=1 loops=1)
-> Seq Scan on fact_orders (cost=0.00..240253.85 rows=3400485 width=38) (actual time=0.006..551.558 rows=3400485 loops=1)
-> Hash (cost=2.00..2.00 rows=100 width=32) (actual time=0.009..0.009 rows=4 loops=1)
Buckets: 1024 Batches: 1 Memory Usage: 9kB
-> CTE Scan on …Run Code Online (Sandbox Code Playgroud) sql postgresql query-optimization explain sql-execution-plan
我有一个这样的查询:
SELECT pt.id,
pt.plan_name,
pt.product_disc_amt,
pt.product_disc_perc,
SUM(ac.premium_amount) AS premium,
ac.id AS ac_id
FROM product pt
INNER JOIN age_classification ac
ON ac.p_id = pt.id
WHERE pt.medical_coverage_for = 'dependents_only'
OR (ac.relationship = 'child' AND ac.age_from::int <= 3 AND ac.age_to:: int >= 3
AND ac.gender = 'female' AND ac.marital_status = 'single')
OR (ac.relationship = 'child' AND ac.age_from::int <= 4 AND ac.age_to:: int >= 4
AND ac.gender = 'male' AND ac.marital_status = 'single' )
OR (ac.relationship = 'child' AND ac.age_from::int <= 2
AND ac.age_to:: …Run Code Online (Sandbox Code Playgroud) 我想根据数组中的 id 顺序在数据库中列出我的产品
我的阵列
'{3,2,1}'::int[]
Run Code Online (Sandbox Code Playgroud)
例如
SELECT id FROM product WHERE id = ANY ('{3,2,1}'::int[]);
Run Code Online (Sandbox Code Playgroud)
此查询获取按产品 id 排序的产品
|id|
|1 |
|2 |
|3 |
Run Code Online (Sandbox Code Playgroud)
但我想列出按数组 id 的索引排序的产品。像这样 :
|id|
|3 |
|2 |
|1 |
Run Code Online (Sandbox Code Playgroud)
是否有可能做到这一点 ?我能怎么做 ?
我正在尝试提取一列数组的不同值。
例如,如果我有两行:
{jonathan,michelle}
{jonathan,michael}
Run Code Online (Sandbox Code Playgroud)
输出应该是:
{jonathan,michelle,michael}
Run Code Online (Sandbox Code Playgroud)
输出可以是数组或“虚拟列”,这不是问题。
嗨,我有汽车列表网站,我想从 JSON 列中过滤多个值 data
我的数据库表如下所示:
id | label | data
---|----------|---------------------------------
1 | "test 1" | {"Year":"2014","Gear":"Auto"}
2 | "test 2" | {"Year":"2010","Gear":"Manual"}
3 | "test 3" | {"Year":"2009","Gear":"None"}
Run Code Online (Sandbox Code Playgroud)
例如,我想按齿轮过滤,“自动”或“手动”:
SELECT * FROM test WHERE
JSON_EXTRACT(data, "$.Year") in (2010,2014) AND
JSON_EXTRACT(data, "$.Gear") in ("Auto","Manual")
Run Code Online (Sandbox Code Playgroud)
当我添加过滤器时,查询返回零结果Gear,但过滤器Year工作正常。
我有一张表如下:
WITH
table1 AS (
SELECT
TIMESTAMP '2016-10-18 2:51:45' AS ts,
'AB4' AS packId,
FALSE AS stat,
'x' AS position
UNION ALL
SELECT
TIMESTAMP '2016-10-18 2:54:11',
'AB4',
FALSE,
'x'
UNION ALL
SELECT
TIMESTAMP '2016-10-18 3:01:17',
'AB4',
FALSE,
'x'
UNION ALL
SELECT
TIMESTAMP '2016-10-18 3:05:42',
'AB4',
TRUE,
NULL
UNION ALL
SELECT
TIMESTAMP '2016-10-18 3:06:24',
'AB4',
FALSE,
'x'
UNION ALL
SELECT
TIMESTAMP '2016-10-18 3:06:36',
'AB4',
TRUE,
'y'
UNION ALL
SELECT
TIMESTAMP '2016-10-18 3:07:41',
'AB4',
FALSE,
'x')
SELECT
ts,
packId,
stat,
position,
LAG(position) …Run Code Online (Sandbox Code Playgroud) sql ×9
mysql ×5
arrays ×4
postgresql ×4
json ×3
group-by ×2
string ×2
average ×1
database ×1
distinct ×1
explain ×1
join ×1
left-join ×1
median ×1
python ×1
sequelize.js ×1
sql-order-by ×1
unnest ×1
where-clause ×1