WITH RECURSIVE
cte1 AS ( SELECT MIN(DATE(create_date)) mindate, MAX(DATE(create_date)) maxdate
FROM shops
UNION ALL
SELECT MIN(DATE(create_date)) mindate, MAX(DATE(create_date)) maxdate
FROM users ),
cte2 AS ( SELECT MIN(mindate) mindate, MAX(maxdate) maxdate
FROM cte1 ),
dates AS ( SELECT mindate thedate, maxdate
FROM cte2
UNION ALL
SELECT thedate + INTERVAL 1 DAY, maxdate
FROM dates
WHERE thedate < maxdate ),
shopstat AS ( SELECT DATE(create_date) thedate, COUNT(*) cnt
FROM shops
GROUP BY thedate ),
userstat AS ( SELECT DATE(create_date) thedate, COUNT(*) cnt
FROM users
GROUP BY thedate )
SELECT thedate `date`,
COALESCE(shopstat.cnt, 0) shops,
COALESCE(userstat.cnt, 0) users
FROM dates
LEFT JOIN shopstat USING (thedate)
LEFT JOIN userstat USING (thedate)SELECT t1.*
FROM table t1
WHERE EXISTS ( SELECT NULL
FROM table t2
WHERE t1.id <> t2.id -- выражение первичного ключа
AND t1.column = t2.column -- для всех полей, кроме первичного ключаDELETE
FROM table t1
WHERE EXISTS ( SELECT NULL
FROM table t2
WHERE t1.id > t2.id -- оставить только запись с минимальным ID
AND t1.column = t2.column SELECT value,
SUM(value = val1) total_1,
SUM(value = val2) total_2
FROM ( SELECT val1 value FROM test
UNION
SELECT val2 FROM test ) total
CROSS JOIN test
GROUP BY value
ORDER BY value;SELECT users.name AS username,
count(orders.id) AS orders_count
FROM users
JOIN orders ON orders.user_id=users.id
GROUP BY users.nameDROP PROCEDURE IF EXISTS get_artist;
DELIMITER ;;
CREATE PROCEDURE get_artist(IN artist_id integer(11), IN show_links integer(1))
BEGIN
CASE WHEN show_links=1
THEN
SELECT *
FROM artist
where id = artist_id;
ELSE
SELECT *
FROM artist
LEFT JOIN artist_social_links ON artist_social_links.artist_id = artist_id
where id = artist_id ;
END CASE;
END;;
DELIMITER ;
CALL get_artist(196796, 1); CREATE TABLE test (entity INT, -- некая строка в структуре
position INT); -- её позиция при сортировкеUPDATE test
SET position := CASE WHEN position = @from
THEN @to
ELSE position + SIGN(@from - @to)
END
WHERE position BETWEEN LEAST(@from, @to) AND GREATEST(@from, @to);SELECT *
FROM email
WHEN public.email.campaign_id IS NULLSELECT *, 'false' AS campaign_id_bool
FROM email
WHEN public.email.campaign_id IS NULLнужно, чтоб были значения и тру и фолс в зависимости от того пустое ли поле
SELECT *,
CASE WHEN public.email.campaign_id IS NULL
THEN 'false'
ELSE 'true'
END AS campaign_id_bool
FROM emailSELECT *,
ELT(1 + public.email.campaign_id IS NULL, 'true', 'false' ) AS campaign_id_bool
FROM email SELECT a.login
FROM account a
JOIN transactions t ON a.id = t.account_id
JOIN game g ON t.game_id = g.id
JOIN company c ON c.id = g.Developer
GROUP BY a.login
HAVING !SUM( c.country != 'USA' OR YEAR(g.Release_date) MOD 2 )что не так делаю?
CREATE TRIGGER tr
ON routes
AFTER INSERT
AS
UPDATE [user]
SET [update] = 1
FROM INSERTED
WHERE id = INSERTED.user_id;