我是数据库的新手,我对交易迷路了。例如,在我有一个sensor_log
不断接收 INSERT的表的情况下,我想在一个事务中将数据移动到另外两个表。
BEGIN;
INSERT INTO sensor_log_a
SELECT id, location
FROM sensor_log
INNER JOIN sensor_location_to_insert USING (location);
INSERT INTO sensor_log_b
SELECT id, location
FROM sensor_log
INNER JOIN sensor_location_to_insert USING (location);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
如果在事务期间插入数据或BEGIN;..COMMIT;
防止这种情况发生,是否存在数据在 sensor_log_a 和 sensor_log_b 之间不同的风险?
我想了解为什么我有不同的结果
我有一个名为 active_transfert 的表,用于记录图像传输
user_id | image_id | created_at
--------|----------|-----------
1 |1 |2014-07-10
1 |2 |2015-01-21
2 |1 |2015-05-23
3 |1 |2016-07-22
4 |6 |2017-06-01
4 |6 |2014-08-22
Run Code Online (Sandbox Code Playgroud)
我想为每个 image_id 返回唯一的 user_id。
SELECT user_id,
image_id
FROM active_transfert
GROUP BY user_id,
image_id; --50
SELECT user_id,
image_id
FROM
(SELECT user_id,
image_id,
rank() OVER (PARTITION BY user_id, image_id
ORDER BY created_at DESC) AS i_ranked
FROM active_transfert) AS i
WHERE i.i_ranked = 1; -- 53
Run Code Online (Sandbox Code Playgroud)
我对 Redshift 运行这些查询。为什么我的第二个查询不能防止重复记录(相同的 user_id 和 image_id)?
预期结果 :
user_id …
Run Code Online (Sandbox Code Playgroud) 我有这个数据:
CREATE TABLE tickets(user_id int NOT NULL);
INSERT INTO tickets VALUES (1);
INSERT INTO tickets VALUES (2);
INSERT INTO tickets VALUES (3); -- 3 times
INSERT INTO tickets VALUES (4); -- 10 times
Run Code Online (Sandbox Code Playgroud)
现在我想显示每个用户的票数百分比。
我试过这个:
WITH number_of_tickets AS (
SELECT user_id, COUNT(user_id) AS number_of_tickets_per_user
FROM tickets
GROUP BY user_id
)
SELECT
number_of_tickets_per_user,
ROUND((COUNT(user_id) * 100.0) / (SELECT COUNT(DISTINCT(user_id)) FROM tickets), 3) -- No no no no
FROM number_of_tickets
GROUP BY number_of_tickets_per_user
ORDER BY number_of_tickets_per_user;
Run Code Online (Sandbox Code Playgroud)
但我可能不能很好地处理百分比计算。结果总是显示每个用户每个票数的 25%。
谢谢