dense_rank function error and not able to proceed further - mysql

I have used below query in Fiddle application for learning purpose but its throwing error:
with result as
(
select salary, dense_rank() over (order by salary desc) as 'dense_rank'
from salary
)
select salary from result where result.denserank = 3
Error:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near '(order by salary desc) as 'DENSE_RANK' from salary' at line 1
What to do further.? Also is Mysql and postgreSql same

Apparently you're using a MySQL version that supports CTEs but does not support Window functions. MySQL 8.0.1 is such version (8.0.1 introduces CTEs for the first time and 8.0.2 introduces window functions).
You need to use a more recent version of MySQL and (ii) change where result.denserank = 3 to where result.dense_rank = 3.

Related

SQL - an alias was previously found when using over() in old mysql version

A sql query didn't work in old version of mysql below 8:
SELECT count(*) OVER() AS d FROM `T`
It gives this error:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near '() AS FULLCOUNT FROM T' at line 1
You can refer to this DBFiddle:
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=7dd651e5b2c988a7a85c76a2c83df066
to test the query with different versions.
then tell me how can I solve that issue without upgrade mysql version
because I don't have access of that server
This way :
SELECT (select COUNT(*) as d FROM T) as d
FROM T;
DEMO

Window function syntax error at over clause

I'm solving a hackerrank SQL problem which you can see [here][1] and I have already solved it using some other method but I want to try the window function for the same, so I have run a basic query to understand the window function.
SELECT salary, SUM(salary) OVER (ORDER BY salary) AS running_total
FROM Employee;
but I got the below error.
ERROR 1064 (42000) at line 4: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the
right syntax to use near '(ORDER BY salary) AS running_total FROM
employee' at line 2
I'm pretty confused why it's throwing an error.
P.S: the query I posted above is not solving the problem, it's just a try to understand the window function, if you can solve the whole problem using the window function and write it in the answer that also will help me learn more. if you need any more details please mention them in the comments.
Table name- Employee
columns:
employee_id-> integer
name-> string
months-> integer
salary-> integer
Mysql version - 8.0.20
[1]: https://www.hackerrank.com/challenges/earnings-of-employees/problem?isFullScreen=true
Most likely, your MySQL version is less than 8+, and therefore does not support window functions. Here is an alternative to your current query which should run on your MySQL version:
SELECT
salary,
(SELECT SUM(e2.salary) FROM Employee e2
WHERE e2.salary <= e1.salary) AS running_total
FROM Employee e1
ORDER BY salary;

Getting a Syntax Error when Trying to Create a CTE in MySQL

Here's the code:
WITH sub_query AS (Select imdp_title_id FROM movie_ratings)
Here's the output:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
MySQL version : '8.0.26'
Software Used : MySQL Workbench 8.0
Thanks in advance.
When you use CTE syntax, you must define the CTE, and then use that CTE in a DML statement.
https://dev.mysql.com/doc/refman/8.0/en/with.html says:
The following example defines CTEs named cte1 and cte2 in the WITH
clause, and refers to them in the top-level SELECT that follows the
WITH clause:
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;
This shows that you have a final SQL statement following one or more <cte> AS ( <subquery> ) definitions.
MySQL 8.0 supports SELECT, UPDATE, or DELETE DML statements following the CTE's.

MySQL throwing error 1064, doesn't seem to recognize OVER command

My query is:
SELECT *,
ROW_NUMBER() OVER (ORDER BY score ASC)
FROM submissions
The error message I receive is:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(ORDER BY score ASC) FROM submissions LIMIT 0, 25' at line 2
I am running this query in phpMyAdmin. I notice that OVER is not colored blue, nor does is it suggested as I type, unlike other command words (ORDER, ASC, etc).
This simpler query runs just fine:
SELECT * FROM submissions
I've tried putting things in quotes, using the RANK function instead, and fiddling with whitespace, but the query still doesn't run. What is wrong here?
My guess is that you are running a version of MySQL which is earlier than 8+, one which does not support ROW_NUMBER. There are a few options for simulating ROW_NUMBER in earlier versions of MySQL. One is to use user variables:
SELECT *,
(#row_number:=#row_number + 1) AS rn
FROM submissions, (SELECT #row_number := 0) tmp
ORDER BY score;

sql mariadb, error syntax over partition

When executing a query I get following error
'[Err] 1064 - You have an error in your SQL syntax; check the manual
that corresponds to your MariaDB server version for the right syntax
to use near '(PARTITION by kd_lv3) as max_date , row_number()
OVER (PARTITION by kd_' at line 6'.
Query :
select kd_lv3
, nm_lv3
, kd_lv2
, kd_lv1
, date(update_date) as update_date
, max(date(update_date)) OVER (PARTITION by kd_lv3) as max_date
, row_number() OVER (PARTITION by kd_lv3) as rownum
from akun_lv3_dump
What should I do to resolve the error?
I would have commented instead of answer, but I don't have points enough.
The SQL looks good to me, but I dug into it and your query has:
(PARTITION by kd_lv3) as max_date
while your error has:
(PARTITION by kd_akun_lv3)
So, if the query you supplied is correct, that isn't what is being run - and you are possibly testing some older sql. Not sure what your environment is, but perhaps something needs refreshing...