    SELECT customer_id, customer_name, COUNT(order_id) as total
    FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id
    GROUP BY customer_id, customer_name
    HAVING COUNT(order_id) > 5
    ORDER BY COUNT(order_id) DESC;

---

    UPDATE customers
            SET totalorders = ordersummary.total
            FROM (SELECT customer_id, count(order_id) As total
    FROM orders GROUP BY customer_id) As ordersummary
            WHERE customers.customer_id = ordersummary.customer_id

---

    SELECT * FROM sometable
    UNION ALL
    SELECT * FROM someothertable;

---

    SET NAMES 'utf8';

---

    CREATE TABLE `PREFIX_address` (
      `id_address` int(10) unsigned NOT NULL auto_increment,
      `id_country` int(10) unsigned NOT NULL,
      `id_state` int(10) unsigned default NULL,
      `id_customer` int(10) unsigned NOT NULL default '0',
      `id_manufacturer` int(10) unsigned NOT NULL default '0',
      `id_supplier` int(10) unsigned NOT NULL default '0',
      `id_warehouse` int(10) unsigned NOT NULL default '0',
      `alias` varchar(32) NOT NULL,
      `company` varchar(64) default NULL,
      `lastname` varchar(32) NOT NULL,
      `firstname` varchar(32) NOT NULL,
      `address1` varchar(128) NOT NULL,
      `address2` varchar(128) default NULL,
      `postcode` varchar(12) default NULL,
      `city` varchar(64) NOT NULL,
      `other` text,
      `phone` varchar(16) default NULL,
      `phone_mobile` varchar(16) default NULL,
      `vat_number` varchar(32) default NULL,
      `dni` varchar(16) DEFAULT NULL,
      `date_add` datetime NOT NULL,
      `date_upd` datetime NOT NULL,
      `active` tinyint(1) unsigned NOT NULL default '1',
      `deleted` tinyint(1) unsigned NOT NULL default '0',
      PRIMARY KEY (`id_address`),
      KEY `address_customer` (`id_customer`),
      KEY `id_country` (`id_country`),
      KEY `id_state` (`id_state`),
      KEY `id_manufacturer` (`id_manufacturer`),
      KEY `id_supplier` (`id_supplier`),
      KEY `id_warehouse` (`id_warehouse`)
    ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8

---

    CREATE TABLE `PREFIX_alias` (
      `id_alias` int(10) unsigned NOT NULL auto_increment,
      `alias` varchar(255) NOT NULL,
      `search` varchar(255) NOT NULL,
      `active` tinyint(1) NOT NULL default '1',
      PRIMARY KEY (`id_alias`),
      UNIQUE KEY `alias` (`alias`)
    ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8

---

    CREATE TABLE `PREFIX_carrier` (
      `id_carrier` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `id_reference` int(10) unsigned NOT NULL,
      `id_tax_rules_group` int(10) unsigned DEFAULT '0',
      `name` varchar(64) NOT NULL,
      `url` varchar(255) DEFAULT NULL,
      `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `shipping_handling` tinyint(1) unsigned NOT NULL DEFAULT '1',
      `range_behavior` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `is_module` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `is_free` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `shipping_external` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `need_range` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `external_module_name` varchar(64) DEFAULT NULL,
      `shipping_method` int(2) NOT NULL DEFAULT '0',
      `position` int(10) unsigned NOT NULL default '0',
      `max_width` int(10) DEFAULT 0,
      `max_height` int(10)  DEFAULT 0,
      `max_depth` int(10)  DEFAULT 0,
      `max_weight` int(10)  DEFAULT 0,
      `grade` int(10)  DEFAULT 0,
      PRIMARY KEY (`id_carrier`),
      KEY `deleted` (`deleted`,`active`),
      KEY `id_tax_rules_group` (`id_tax_rules_group`)
    ) ENGINE=ENGINE_TYPE  DEFAULT CHARSET=utf8

---

    CREATE TABLE IF NOT EXISTS `PREFIX_specific_price_rule` (
    	`id_specific_price_rule` int(10) unsigned NOT NULL AUTO_INCREMENT,
    	`name` VARCHAR(255) NOT NULL,
    	`id_shop` int(11) unsigned NOT NULL DEFAULT '1',
    	`id_currency` int(10) unsigned NOT NULL,
    	`id_country` int(10) unsigned NOT NULL,
    	`id_group` int(10) unsigned NOT NULL,
    	`from_quantity` mediumint(8) unsigned NOT NULL,
    	`price` DECIMAL(20,6),
    	`reduction` decimal(20,6) NOT NULL,
    	`reduction_type` enum('amount','percentage') NOT NULL,
    	`from` datetime NOT NULL,
    	`to` datetime NOT NULL,
    	PRIMARY KEY (`id_specific_price_rule`),
    	KEY `id_product` (`id_shop`,`id_currency`,`id_country`,`id_group`,`from_quantity`,`from`,`to`)
    ) ENGINE=ENGINE_TYPE  DEFAULT CHARSET=utf8

---

    UPDATE `PREFIX_configuration` SET value = '6' WHERE name = 'PS_SEARCH_WEIGHT_PNAME'

---

    UPDATE `PREFIX_hook_module` SET position = 1
    WHERE
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayPayment') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'cheque')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayPaymentReturn') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'cheque')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayHome') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'homeslider')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionAuthentication') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsdata')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionShopDataDuplication') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'homeslider')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayTop') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocklanguages')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCustomerAccountAdd') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsdata')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayCustomerAccount') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'favoriteproducts')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsModules') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statsvisits')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsGraphEngine') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'graphvisifire')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayAdminStatsGridEngine') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'gridhtml')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayLeftColumnProduct') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocksharefb')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionSearch') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'statssearch')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryAdd') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryUpdate') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionCategoryDelete') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'actionAdminMetaSave') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcategories')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayMyAccountBlock') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'favoriteproducts')
    	OR
    	id_hook = (SELECT id_hook FROM `PREFIX_hook` WHERE name = 'displayFooter') AND id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockreinsurance')

---

    ALTER TABLE `PREFIX_employee` ADD `bo_color` varchar(32) default NULL AFTER `stats_date_to`

---

    INSERT INTO `PREFIX_cms_category_lang` VALUES(1, 3, 'Inicio', '', 'home', NULL, NULL, NULL)

---

    INSERT INTO `PREFIX_cms_category` VALUES(1, 0, 0, 1, NOW(), NOW(),0)

---

    UPDATE `PREFIX_cms_category` SET `position` = 0

---

    ALTER TABLE `PREFIX_customer` ADD `note` text AFTER `secure_key`

---

    ALTER TABLE `PREFIX_contact` ADD `customer_service` tinyint(1) NOT NULL DEFAULT 0 AFTER `email`

---

    INSERT INTO `PREFIX_specific_price` (`id_product`, `id_shop`, `id_currency`, `id_country`, `id_group`, `priority`, `price`, `from_quantity`, `reduction`, `reduction_type`, `from`, `to`)
    	(	SELECT dq.`id_product`, 1, 1, 0, 1, 0, 0.00, dq.`quantity`, IF(dq.`id_discount_type` = 2, dq.`value`, dq.`value` / 100), IF (dq.`id_discount_type` = 2, 'amount', 'percentage'), '0000-00-00 00:00:00', '0000-00-00 00:00:00'
    		FROM `PREFIX_discount_quantity` dq
    		INNER JOIN `PREFIX_product` p ON (p.`id_product` = dq.`id_product`)
    	)

---

    DROP TABLE `PREFIX_discount_quantity`

---

    INSERT INTO `PREFIX_specific_price` (`id_product`, `id_shop`, `id_currency`, `id_country`, `id_group`, `priority`, `price`, `from_quantity`, `reduction`, `reduction_type`, `from`, `to`) (
    	SELECT
    		p.`id_product`,
    		1,
    		0,
    		0,
    		0,
    		0,
    		0.00,
    		1,
    		IF(p.`reduction_price` > 0, p.`reduction_price`, p.`reduction_percent` / 100),
    		IF(p.`reduction_price` > 0, 'amount', 'percentage'),
    		IF (p.`reduction_from` = p.`reduction_to`, '0000-00-00 00:00:00', p.`reduction_from`),
    		IF (p.`reduction_from` = p.`reduction_to`, '0000-00-00 00:00:00', p.`reduction_to`)
    	FROM `PREFIX_product` p
    	WHERE p.`reduction_price` OR p.`reduction_percent`
    )

---

    ALTER TABLE `PREFIX_product`
    	DROP `reduction_price`,
    	DROP `reduction_percent`,
    	DROP `reduction_from`,
    	DROP `reduction_to`

---

    INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES
    ('PS_SPECIFIC_PRICE_PRIORITIES', 'id_shop;id_currency;id_country;id_group', NOW(), NOW()),
    ('PS_TAX_DISPLAY', 0, NOW(), NOW()),
    ('PS_SMARTY_FORCE_COMPILE', 1, NOW(), NOW()),
    ('PS_DISTANCE_UNIT', 'km', NOW(), NOW()),
    ('PS_STORES_DISPLAY_CMS', 0, NOW(), NOW()),
    ('PS_STORES_DISPLAY_FOOTER', 0, NOW(), NOW()),
    ('PS_STORES_SIMPLIFIED', 0, NOW(), NOW()),
    ('PS_STATSDATA_CUSTOMER_PAGESVIEWS', 1, NOW(), NOW()),
    ('PS_STATSDATA_PAGESVIEWS', 1, NOW(), NOW()),
    ('PS_STATSDATA_PLUGINS', 1, NOW(), NOW())

---

    INSERT INTO `PREFIX_configuration` (`name`, `value`, `date_add`, `date_upd`) VALUES ('PS_CONDITIONS_CMS_ID', IFNULL((SELECT `id_cms` FROM `PREFIX_cms` WHERE `id_cms` = 3), 0), NOW(), NOW())

---

    CREATE TEMPORARY TABLE `PREFIX_configuration_tmp` (
    	`value` text
    )

---

    SET @defaultOOS = (SELECT value FROM `PREFIX_configuration` WHERE name = 'PS_ORDER_OUT_OF_STOCK')

---

    UPDATE `PREFIX_product` p SET `cache_default_attribute` =  0 WHERE `id_product` NOT IN (SELECT `id_product` FROM `PREFIX_product_attribute`)

---

    INSERT INTO `PREFIX_hook` (`name`, `title`, `description`, `position`) VALUES ('processCarrier', 'Carrier Process', NULL, 0)

---

    INSERT INTO `PREFIX_stock_mvt_reason_lang` (`id_stock_mvt_reason`, `id_lang`, `name`) VALUES
    (1, 1, 'Order'),
    (1, 2, 'Commande'),
    (2, 1, 'Missing Stock Movement'),
    (2, 2, 'Mouvement de stock manquant'),
    (3, 1, 'Restocking'),
    (3, 2, 'RÃ©assort')

---

    INSERT INTO `PREFIX_meta_lang` (`id_lang`, `id_meta`, `title`, `url_rewrite`) VALUES
    (1, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'Authentication', 'authentication'),
    (2, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'Authentification', 'authentification'),
    (3, (SELECT `id_meta` FROM `PREFIX_meta` WHERE `page` = 'authentication'), 'AutenticaciÃ³n', 'autenticacion')

---

    LOCK TABLES `admin_assert` WRITE

---

    UNLOCK TABLES

---

    DROP TABLE IF EXISTS `admin_role`

---

    SELECT * FROM
    -- This is another comment
    MyTable # One final comment

    /* This is a block comment
    */ WHERE 1 = 2;

---

    SELECT -- This is a test

---

    SELECT Test FROM Test WHERE
    (
     MyColumn = 1 )) AND ((( SomeOtherColumn = 2);

---

    ALTER TABLE `test_modify` MODIFY `id` INT(11) UNSIGNED NOT NULL;

---

    ALTER TABLE `test_change` CHANGE `id` `_id` BIGINT(20) UNSIGNED NULL;

---

    SELECT * LIMIT 1; SELECT a,b,c,d FROM e LIMIT 1, 2; SELECT 1,2,3 WHERE a in (1,2,3,4,5) and b=5;

---

    SELECT count - 50
    WHERE a-50 = b
    WHERE 1 and - 50
    WHERE -50 = a
    WHERE a = -50
    WHERE 1 /*test*/ - 50
    WHERE 1 and -50;

---

    SELECT @ and b;

---

    SELECT @"weird variable name";

---

    SELECT :pdoParam;

---

    SELECT "no closing quote

---

    SELECT [sqlserver] FROM [escap[e]]d style];

---

    SELECT a FROM b LEFT
    OUTER
    JOIN c on (d=f);

---

    WITH cte AS (SELECT a, b FROM table),
    RECURSIVE fibonacci (n, fib_n, next_fib_n) AS (
      SELECT 1, 0, 1
      UNION ALL
      SELECT n + 1, next_fib_n, fib_n + next_fib_n
      FROM fibonacci WHERE n < 10
    )
    SELECT * FROM fibonacci;

---

    WITH cte1 AS (SELECT a, b FROM table1),
    cte2 AS (SELECT c, d FROM table2)
    SELECT b, d FROM cte1 JOIN cte2
    WHERE cte1.a = cte2.c;

---

    SELECT a,
        GROUP_CONCAT(b, '.') OVER (ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS no_others,
        GROUP_CONCAT(b, '.') OVER (ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW) AS current_row,
        GROUP_CONCAT(b, '.') OVER (ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE GROUP) AS grp,
        GROUP_CONCAT(b, '.') OVER (ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES) AS tie,
        GROUP_CONCAT(b, '.') FILTER (WHERE c != 'two') OVER (ORDER BY a) AS filtered,
        CONVERT(VARCHAR(20), AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY DATEPART(yy, ModifiedDate)), 1) AS MovingAvg,
        AVG(starting_salary) OVER w2 AVG,
        MIN(starting_salary) OVER w2 MIN_STARTING_SALARY,
        MAX(starting_salary) OVER (w1 ORDER BY hire_date),
        LISTAGG(arg, ',') OVER (PARTITION BY part ORDER BY ord ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS LISTAGG_ROWS,
        LISTAGG(arg, ',') OVER (PARTITION BY part ORDER BY ord RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS LISTAGG_RANGE,
        MIN(Revenue) OVER (PARTITION BY DepartmentID ORDER BY RevenueYear ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MinRevenueBeyond
    FROM t1
    WINDOW w1 AS (PARTITION BY department, division), w2 AS (w1 ORDER BY hire_date);