简体   繁体   中英

Allow duplicates with IN operator in SQL

This is my query.

SELECT *, COUNT(A) AS FREQUENCY FROM TABA WHERE ID IN
(
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
)
GROUP BY A
ORDER BY FREQUENCY

With this query I am always getting the FREQUENCY value as 1.

Suppose say the below sub query gives the below result.

 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID FROM TABA WHERE XXXXX)

Result:

1
2
3
2
3
4
2

Now the full query is giving only the unique records when used with IN.

I want the results to be sorted by FREQUENCY, in this eg frequency of number 3 is two. How can I do this? I hope I am making sense.

Basically, I have lots of columns in a table and I want to perform search and return the results based on the frequency of the search items.

SELECT ID, COUNT(*) AS FREQUENCY 
FROM TABA 
WHERE XXXXX
  OR XXXXX
  OR XXXXX
GROUP BY ID
ORDER BY COUNT(*)

You should be able to get the correct frequency values using the following:

SELECT ID, COUNT(A) AS FREQUENCY
FROM (
 (SELECT ID, A FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID, A FROM TABA WHERE XXXXX)
 UNION ALL
 (SELECT ID, A FROM TABA WHERE XXXXX)
) TABA_UNION
GROUP BY ID

If you need to combine this with the other columns of the TABA table, similar to how your original query is written, then you can do this:

SELECT TABA.*, ISNULL(TABA_FREQUENCY.FREQUENCY, 0) as FREQUENCY
FROM TABA
LEFT OUTER JOIN (
    SELECT ID, COUNT(A) AS FREQUENCY
    FROM (
     (SELECT ID, A FROM TABA WHERE XXXXX)
     UNION ALL
     (SELECT ID, A FROM TABA WHERE XXXXX)
     UNION ALL
     (SELECT ID, A FROM TABA WHERE XXXXX)
    ) TABA_UNION
    GROUP BY ID
) TABA_FREQUENCY ON
  TABA_FREQUENCY.ID = TABA.ID

Left outer join is used instead of inner join in order to include any records in TABA that don't meet any of the criteria specified in the unioned select statements.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM