小编Mio*_*Mio的帖子

如果在事务中间插入数据会发生什么?

我是数据库的新手,我对交易迷路了。例如,在我有一个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 之间不同的风险?

postgresql

5
推荐指数
1
解决办法
1147
查看次数

了解为什么 rank() over 不适合不选择重复行

我想了解为什么我有不同的结果

我有一个名为 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)

window-functions redshift rank

5
推荐指数
1
解决办法
1220
查看次数

获取组的百分比

我有这个数据:

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%。

谢谢

postgresql group-by

5
推荐指数
2
解决办法
6721
查看次数

标签 统计

postgresql ×2

group-by ×1

rank ×1

redshift ×1

window-functions ×1