WITH cte AS (
SELECT *,
SUM((flag IS NULL) :: INT) OVER (PARTITION BY user_id ORDER BY product_id ASC) grp
FROM test
)
SELECT product_id, user_id, flag,
DENSE_RANK() OVER (PARTITION BY user_id ORDER BY grp ASC) "rank"
FROM cte
ORDER BY 1,2;
"Итог" numeric GENERATED ALWAYS AS ( COALESCE("Январь", 0) +
COALESCE("Февраль", 0) +
COALESCE("Март", 0) +
COALESCE("Апрель", 0) +
COALESCE("Май", 0) +
COALESCE("Июнь", 0) +
COALESCE("Июль", 0) +
COALESCE("Август", 0) +
COALESCE("Сентябрь", 0) +
COALESCE("Октябрь", 0) +
COALESCE("Ноябрь", 0) +
COALESCE("Декабрь", 0) ) STORED
SELECT amount || ' ' ||
CASE WHEN amount % 100 / 10 = 1 THEN 'автомобилей'
WHEN amount % 10 = 1 THEN 'автомобиль'
WHEN amount % 10 IN (2,3,4) THEN 'автомобиля'
ELSE 'автомобилей'
END
FROM generate_series(0,600) AS source (amount)
Запрос
SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;
Задача заключается в том, чтобы добавить еще одну колонку для мультиязычности, назвав DocTypeEn, в котором будет перевод.
CREATE TABLE translation (
token_id INT, -- идентификатор строки
language_id INT, -- идентификатор языка
PRIMARY KEY (token_id, language_id),
value VARCHAR(100) NULL DEFAULT NULL
);
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
SELECT COALESCE((
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
), (
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @default_language_name;
)) value;
{
"ru":"Выход",
"en":"Quit"
}
Если кто-то набросает какой-нибудь PL/pgSQL код в любом фиддле, для иллюстрации что на нем можно делать - буду премного благодарен.
Процедуры, в отличие от функций, не возвращают значение; поэтому в CREATE PROCEDURE отсутствует предложение RETURNS. Однако процедуры могут выдавать данные в вызывающий код через выходные параметры.
?|
в PostgreSQL выполняет поиск строковых значений в списке элементов массива или ключей (имён атрибутов) объекта:jsonb ?| text[] → boolean
Do any of the strings in the text array exist as top-level keys or array elements?
'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] → t
&&
WITH cte AS (
SELECT t1.cat_id, RANK() OVER (ORDER BY COUNT(t2.cat_id) DESC) rnk
FROM user_to_cat t1
JOIN user_to_cat t2 ON t1.user_id = t2.user_id
AND t1.cat_id <> t2.cat_id
GROUP BY 1
)
SELECT category.code
FROM cte
JOIN category ON category.id = cte.cat_id
WHERE rnk = 1
насколько оптимально такое решение?
INSERT INTO Заказ (ПоставщикID, КлиентID, АдминистраторID, {остальные поля})
VALUES (
(SELECT ПоставщикID FROM Поставщик WHERE Имя = 'Василий Пупкин'),
(SELECT КлиентID FROM ...),
(SELECT АдминистраторID FROM ...),
{остальные значения}
)
Прочитал, что в mysql в движке innodb индексы делятся на два больших типа - первичный и вторичный
кластеризованный, как написано хранится с данными
Всегда ли не кластиризованные индексы хранятся в оперативной памяти или это как-то можно регулировать?
Я слышал что индексы должны быть в пределах мегабайт, а не гигабайт.
Читал, что бывает так, что индекс в таблице индекса хранит сразу данные определенных столбцов, а не ссылки на эти строки в основной таблице.