JPA #Query how to use count, distinct & concat together version - spring-data-jpa

JPA version 1.11.22
Inside a #Query how can we use count, distinct & concat together.
Basically I want the distinct count of a group of multiple columns.
I've tried the following queries
#Query("SELECT count(distinct concat(col1, col2, col3)) from entity where col1 is not null")
Thanks

I tried with work around for this and it worked.
Try to add this to your entity #Formula (from org.hibernate.annotations) like below,
#Formula("concat(col1, col2, col3)")
private String concated;
and in spring repository, try with
#Query("SELECT count(distinct concated) from entity where col1 is not null")

Related

How to do 'select count(distinct column) from table' with jpa query method?

Is there a way to do select count(distinct column1) from table with jpa query method not with query annotation?
I know I can do select count(distinct column1) from table where column2 = :column2 by long countDistinctColumn1ByColumn2(:column2).
I've searched official documents and tried some tests but couldn't find a way, thanks in advance.
This is not supported by Spring Data JPA.
The documentation can be found here https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods

count distinct concat in BigQuery

I have tried PostgreSQL:count distinct (col1,col2,col3,col4,col5)
in BigQuery :Count distinct concat(col1,col2,col3,col4,col5)
My scenario is I need to get same result as PostgreSQL in BigQuery
Though this scenario works on 3 columns ,I am not getting same value as PostgreSQL for 5 columns.
sample query:
select col1,
count(distinct concat((col1,col2,col3,col4,col5)
from table A
group by col1
when I remove distinct and concat, simple count(col1,col2,col3,col4,col5) gives exact value as populated in PostgreSQL. But i need to have distinct of these columns. Is there any way to achieve this? and does bigquery concat works differently?
Below few options for BigQuery Standard SQL
#standardSQL
SELECT col1,
COUNT(DISTINCT TO_JSON_STRING((col1,col2,col3,col4,col5)))
FROM A
GROUP BY col1
OR
#standardSQL
SELECT col1,
COUNT(DISTINCT FORMAT('%T', [col1,col2,col3,col4,col5]))
FROM A
GROUP BY col1
An alternative suitable for the many databases that don't support that form of COUNT DISTINCT:
SELECT COUNT(*)
FROM (
SELECT DISTINCT Origin, Dest, Reporting_Airline
FROM `fh-bigquery.flights.ontime_201908`
WHERE FlightDate_year = "2018-01-01"
)
My guess on why CONCAT didn't work in your sample: Do you have any null columns?

looking for examples/samples using Spark aggregate and group by in Cassandra

I want to run the following query using Spark Python (pull data from Cassandra) similar to Oracle SQL:
select name, value, count(*) from table_name order by name, value
group by name....
any examples/samples will help, thanks!
Using Scala
val results = sqlContext.sql(
"select name, value, count(*) from table group by name, value"
)

JPA - MAX of COUNT or SELECT FROM SELECT

I wrote the following query for MySQL:
SELECT subquery.t1_column1,
subquery.t2_id,
MAX(subquery.val)
FROM (
SELECT t1.column1 as t1_column1,
t1.id_t2 AS t2_id,
count(1) AS val
FROM table1 t1
INNER JOIN table2 t2
ON t2.id = t1.id_t2
GROUP BY t1.id_t2
) subquery
GROUP BY t1_column1
And I'd like to translate it into JPA (JPQL or criteria query).
I don't know how to make this max(count) thing, and JPA doesn't seem to like the SELECT FROM SELECT...
If anyone has an idea other than native queries (I'll do it for now), it would be great.
I haven't checked tha JPA specification, but given that the Hibernate documentation says
Note that HQL subqueries can occur only in the select or where
clauses.
I very much doubt that your query can be transformed in a valid JPQL query.
You'll have to keep using this native SQL query.
JPA 2.0 JPQL does not support sub-selects in the from clause. You may want to try to rewrite your query, or use a native SQL query.
EclipseLink 2.4 will support sub-selects in the FROM clause,
see,
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause

Applying distinct on more than one field?

I have a SQL query, like so:
SELECT DISTINCT ID, Name FROM Table
This brings up all the distinct IDs (1...13), but in the 13 IDs, it repeats the name (as it comes up twice). The order of the query (ID, Name) has to be kept the same as the app using this query is coded with this assumption.
Is there a way to ensure there are no duplicates?
Thanks
You can try :
select id, name from table group by id,name
But it seems like distinct should work. Perhaps there are trailing spaces at the end of your name fields?
Instead of using DISTINCT, use GROUP BY
SELECT ID, Name FROM Table GROUP BY ID, Name